Autogenerated HTML docs for v2.31.1-442-g7e391 
diff --git a/MyFirstContribution.html b/MyFirstContribution.html index 4d3d0c4..256cc3f 100644 --- a/MyFirstContribution.html +++ b/MyFirstContribution.html 
@@ -1912,7 +1912,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-10 15:27:55 PST  + 2021-02-11 08:27:55 JST   </div>   </div>   </body>  
diff --git a/MyFirstObjectWalk.html b/MyFirstObjectWalk.html index 602f926..bec13b7 100644 --- a/MyFirstObjectWalk.html +++ b/MyFirstObjectWalk.html 
@@ -1717,7 +1717,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-12-08 16:10:07 PST  + 2020-12-09 09:10:07 JST   </div>   </div>   </body>  
diff --git a/RelNotes/2.32.0.txt b/RelNotes/2.32.0.txt index c746ad1..f4e5191 100644 --- a/RelNotes/2.32.0.txt +++ b/RelNotes/2.32.0.txt 
@@ -75,6 +75,11 @@  * The command line completion (in contrib/) has learned that  CHERRY_PICK_HEAD is a possible pseudo-ref.   + * Userdiff patterns for "Scheme" has been added. + + * "git log" learned "--diff-merges=<style>" option, with an + associated configuration variable log.diffMerges. +    Performance, Internal Implementation, Development Support etc.   @@ -126,6 +131,24 @@  primarily to enhance its test coverage (the strategy has been  available as an explicit "-s ort" choice).   + * A bit of code clean-up and a lot of test clean-up around userdiff + area. + + * Handling of "promisor packs" that allows certain objects to be + missing and lazily retrievable has been optimized (a bit). + + * When packet_write() fails, we gave an extra error message + unnecessarily, which has been corrected. + + * The checkout machinery has been taught to perform the actual + write-out of the files in parallel when able. + + * Show errno in the trace output in the error codepath that calls + read_raw_ref method. + + * Effort to make the command line completion (in contrib/) safe with + "set -u" continues. +    Fixes since v2.31  ----------------- @@ -215,6 +238,30 @@  option.  (merge c5c0548d79 vs/completion-with-set-u later to maint).   + * When "git pack-objects" makes a literal copy of a part of existing + packfile using the reachability bitmaps, its update to the progress + meter was broken. + (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint). + + * The dependencies for config-list.h and command-list.h were broken + when the former was split out of the latter, which has been + corrected. + (merge 56550ea718 sg/bugreport-fixes later to maint). + + * "git push --quiet --set-upstream" was not quiet when setting the + upstream branch configuration, which has been corrected. + (merge f3cce896a8 ow/push-quiet-set-upstream later to maint). + + * The prefetch task in "git maintenance" assumed that "git fetch" + from any remote would fetch all its local branches, which would + fetch too much if the user is interested in only a subset of + branches there. + (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint). + + * Clarify that pathnames recorded in Git trees are most often (but + not necessarily) encoded in UTF-8. + (merge 9364bf465d ab/pathname-encoding-doc later to maint). +  * Other code cleanup, docfix, build fix, etc.  (merge f451960708 dl/cat-file-doc-cleanup later to maint).  (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint). @@ -229,3 +276,7 @@  (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).  (merge fc12b6fdde fm/user-manual-use-preface later to maint).  (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint). + (merge 61a7660516 hn/reftable-tables-doc-update later to maint). + (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint). + (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint). + (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint). 
diff --git a/SubmittingPatches.html b/SubmittingPatches.html index 9ef7070..f4f5923 100644 --- a/SubmittingPatches.html +++ b/SubmittingPatches.html 
@@ -862,10 +862,13 @@  </ul></div>   <div class="paragraph"><p>If in doubt which identifier to use, run <code>git log --no-merges</code> on the   files you are modifying to see the current conventions.</p></div>  -<div class="paragraph" id="summary-section"><p>It&#8217;s customary to start the remainder of the first line after "area: "  -with a lower-case letter. E.g. "doc: clarify&#8230;", not "doc:  -Clarify&#8230;", or "githooks.txt: improve&#8230;", not "githooks.txt:  -Improve&#8230;".</p></div>  +<div class="paragraph" id="summary-section"><p>The title sentence after the "area:" prefix omits the full stop at the  +end, and its first word is not capitalized unless there is a reason to  +capitalize it other than because it is the first word in the sentence.  +E.g. "doc: clarify&#8230;", not "doc: Clarify&#8230;", or "githooks.txt:  +improve&#8230;", not "githooks.txt: Improve&#8230;". But "refs: HEAD is also  +treated as a ref" is correct, as we spell <code>HEAD</code> in all caps even when  +it appears in the middle of a sentence.</p></div>   <div class="paragraph" id="meaningful-message"><p>The body should provide a meaningful commit message, which:</p></div>   <div class="olist arabic"><ol class="arabic">   <li>  @@ -1393,7 +1396,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-17 15:51:21 PDT  + 2021-04-30 15:03:36 JST   </div>   </div>   </body>  
diff --git a/SubmittingPatches.txt b/SubmittingPatches.txt index 0452db2..55287d7 100644 --- a/SubmittingPatches.txt +++ b/SubmittingPatches.txt 
@@ -117,10 +117,13 @@  files you are modifying to see the current conventions.    [[summary-section]] -It's customary to start the remainder of the first line after "area: " -with a lower-case letter. E.g. "doc: clarify...", not "doc: -Clarify...", or "githooks.txt: improve...", not "githooks.txt: -Improve...". +The title sentence after the "area:" prefix omits the full stop at the +end, and its first word is not capitalized unless there is a reason to +capitalize it other than because it is the first word in the sentence. +E.g. "doc: clarify...", not "doc: Clarify...", or "githooks.txt: +improve...", not "githooks.txt: Improve...". But "refs: HEAD is also +treated as a ref" is correct, as we spell `HEAD` in all caps even when +it appears in the middle of a sentence.    [[meaningful-message]]  The body should provide a meaningful commit message, which: 
diff --git a/diff-options.txt b/diff-options.txt index aa2b5c1..530d115 100644 --- a/diff-options.txt +++ b/diff-options.txt 
@@ -34,7 +34,7 @@  endif::git-format-patch[]    ifdef::git-log[] ---diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc):: +--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc)::  --no-diff-merges:: 	Specify diff format to be used for merge commits. Default is 	{diff-merges-default} unless `--first-parent` is in use, in which case @@ -45,17 +45,24 @@ 	Disable output of diffs for merge commits. Useful to override 	implied value.  + +--diff-merges=on::: +--diff-merges=m::: +-m::: +	This option makes diff output for merge commits to be shown in +	the default format. `-m` will produce the output only if `-p` +	is given as well. The default format could be changed using +	`log.diffMerges` configuration parameter, which default value +	is `separate`. ++  --diff-merges=first-parent:::  --diff-merges=1::: 	This option makes merge commits show the full diff with 	respect to the first parent only.  +  --diff-merges=separate::: ---diff-merges=m::: --m::: 	This makes merge commits show the full diff with respect to 	each of the parents. Separate log entry and diff is generated -	for each parent. `-m` doesn't produce any output without `-p`. +	for each parent.  +  --diff-merges=combined:::  --diff-merges=c::: @@ -293,11 +300,14 @@  linkgit:git-config[1]).    --name-only:: -	Show only names of changed files. +	Show only names of changed files. The file names are often encoded in UTF-8. +	For more information see the discussion about encoding in the linkgit:git-log[1] +	manual page.    --name-status:: 	Show only names and status of changed files. See the description 	of the `--diff-filter` option on what the status letters mean. +	Just like `--name-only` the file names are often encoded in UTF-8.    --submodule[=<format>]:: 	Specify how differences in submodules are shown. When specifying 
diff --git a/everyday.html b/everyday.html index 171f2be..0c67470 100644 --- a/everyday.html +++ b/everyday.html 
@@ -750,7 +750,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-05-17 15:26:41 PDT  + 2016-05-18 07:26:41 JST   </div>   </div>   </body>  
diff --git a/fetch-options.txt b/fetch-options.txt index 07783de..9e7b4e1 100644 --- a/fetch-options.txt +++ b/fetch-options.txt 
@@ -110,6 +110,11 @@ 	setting `fetch.writeCommitGraph`.  endif::git-pull[]   +--prefetch:: +	Modify the configured refspec to place all refs into the +	`refs/prefetch/` namespace. See the `prefetch` task in +	linkgit:git-maintenance[1]. +  -p::  --prune:: 	Before fetching, remove any remote-tracking references that no 
diff --git a/git-add.html b/git-add.html index 008a001..26a2528 100644 --- a/git-add.html +++ b/git-add.html 
@@ -1375,7 +1375,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-am.html b/git-am.html index d15e32b..89b62e4 100644 --- a/git-am.html +++ b/git-am.html 
@@ -1198,7 +1198,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-annotate.html b/git-annotate.html index 466b2d7..5df2fac 100644 --- a/git-annotate.html +++ b/git-annotate.html 
@@ -1070,7 +1070,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-apply.html b/git-apply.html index f7a3cd8..3f9ab40 100644 --- a/git-apply.html +++ b/git-apply.html 
@@ -1221,7 +1221,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-15 14:08:03 PDT  + 2021-04-16 06:08:03 JST   </div>   </div>   </body>  
diff --git a/git-archimport.html b/git-archimport.html index db7a841..6aac06b 100644 --- a/git-archimport.html +++ b/git-archimport.html 
@@ -905,7 +905,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-archive.html b/git-archive.html index f2dd90a..41ecef3 100644 --- a/git-archive.html +++ b/git-archive.html 
@@ -1106,7 +1106,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-10-05 15:17:53 PDT  + 2020-10-06 07:17:53 JST   </div>   </div>   </body>  
diff --git a/git-bisect.html b/git-bisect.html index 2c963dc..2292444 100644 --- a/git-bisect.html +++ b/git-bisect.html 
@@ -1240,7 +1240,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-09-03 13:19:53 PDT  + 2020-09-04 05:19:53 JST   </div>   </div>   </body>  
diff --git a/git-blame.html b/git-blame.html index 7961384..dff2c14 100644 --- a/git-blame.html +++ b/git-blame.html 
@@ -1365,7 +1365,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-25 15:29:19 PST  + 2021-01-26 08:29:19 JST   </div>   </div>   </body>  
diff --git a/git-branch.html b/git-branch.html index 455198c..c8ee1f6 100644 --- a/git-branch.html +++ b/git-branch.html 
@@ -1397,7 +1397,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-bugreport.html b/git-bugreport.html index caf04f5..92482e8 100644 --- a/git-bugreport.html +++ b/git-bugreport.html 
@@ -856,7 +856,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-06-08 18:30:54 PDT  + 2020-06-09 10:30:54 JST   </div>   </div>   </body>  
diff --git a/git-bundle.html b/git-bundle.html index a933375..9ce1425 100644 --- a/git-bundle.html +++ b/git-bundle.html 
@@ -1046,7 +1046,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-11 18:39:25 PDT  + 2020-08-12 10:39:25 JST   </div>   </div>   </body>  
diff --git a/git-cat-file.html b/git-cat-file.html index 9376299..45d717d 100644 --- a/git-cat-file.html +++ b/git-cat-file.html 
@@ -1186,7 +1186,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-22 14:17:33 PDT  + 2021-03-23 06:17:33 JST   </div>   </div>   </body>  
diff --git a/git-check-attr.html b/git-check-attr.html index 731e57d..c4c38fe 100644 --- a/git-check-attr.html +++ b/git-check-attr.html 
@@ -960,7 +960,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-check-ignore.html b/git-check-ignore.html index 0b792ee..8c3f2f5 100644 --- a/git-check-ignore.html +++ b/git-check-ignore.html 
@@ -924,7 +924,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-check-mailmap.html b/git-check-mailmap.html index db4d1bd..7bf7df5 100644 --- a/git-check-mailmap.html +++ b/git-check-mailmap.html 
@@ -811,7 +811,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-25 15:29:19 PST  + 2021-01-26 08:29:19 JST   </div>   </div>   </body>  
diff --git a/git-check-ref-format.html b/git-check-ref-format.html index c721c11..bb6ed36 100644 --- a/git-check-ref-format.html +++ b/git-check-ref-format.html 
@@ -963,7 +963,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-checkout-index.html b/git-checkout-index.html index 291b33e..160aa1f 100644 --- a/git-checkout-index.html +++ b/git-checkout-index.html 
@@ -1009,7 +1009,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-checkout.html b/git-checkout.html index 4afa59e..b3f96d3 100644 --- a/git-checkout.html +++ b/git-checkout.html 
@@ -1560,7 +1560,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-10-27 15:58:27 PDT  + 2020-10-28 07:58:27 JST   </div>   </div>   </body>  
diff --git a/git-cherry-pick.html b/git-cherry-pick.html index 4390f65..3527697 100644 --- a/git-cherry-pick.html +++ b/git-cherry-pick.html 
@@ -1212,7 +1212,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 14:02:22 PST  + 2020-11-03 07:02:22 JST   </div>   </div>   </body>  
diff --git a/git-cherry.html b/git-cherry.html index 4dcf809..4ec5d2b 100644 --- a/git-cherry.html +++ b/git-cherry.html 
@@ -915,7 +915,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-12-12 16:55:14 PST  + 2013-12-13 09:55:14 JST   </div>   </div>   </body>  
diff --git a/git-citool.html b/git-citool.html index 846b53a..5bd454e 100644 --- a/git-citool.html +++ b/git-citool.html 
@@ -776,7 +776,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-clean.html b/git-clean.html index bcd2c6a..f659170 100644 --- a/git-clean.html +++ b/git-clean.html 
@@ -973,7 +973,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-clone.html b/git-clone.html index 0acf3e8..56f36da 100644 --- a/git-clone.html +++ b/git-clone.html 
@@ -1430,7 +1430,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-08 14:45:29 PDT  + 2021-04-09 06:45:29 JST   </div>   </div>   </body>  
diff --git a/git-column.html b/git-column.html index b36d79d..e8b1ec3 100644 --- a/git-column.html +++ b/git-column.html 
@@ -873,7 +873,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-commit-graph.html b/git-commit-graph.html index de21e2a..a087d1d 100644 --- a/git-commit-graph.html +++ b/git-commit-graph.html 
@@ -940,7 +940,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 14:02:22 PST  + 2020-11-03 07:02:22 JST   </div>   </div>   </body>  
diff --git a/git-commit-tree.html b/git-commit-tree.html index dadb3d6..659248a 100644 --- a/git-commit-tree.html +++ b/git-commit-tree.html 
@@ -1029,7 +1029,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-04-22 14:37:28 PDT  + 2020-04-23 06:37:28 JST   </div>   </div>   </body>  
diff --git a/git-commit.html b/git-commit.html index 6b6c0e4..db33aaa 100644 --- a/git-commit.html +++ b/git-commit.html 
@@ -1780,7 +1780,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-07 17:16:19 PDT  + 2021-04-08 09:16:19 JST   </div>   </div>   </body>  
diff --git a/git-config.html b/git-config.html index 9b29bc8..6eecdd5 100644 --- a/git-config.html +++ b/git-config.html 
@@ -3430,6 +3430,36 @@  </p>   </dd>   <dt class="hdlist1">  +checkout.workers  +</dt>  +<dd>  +<p>  + The number of parallel workers to use when updating the working tree.  + The default is one, i.e. sequential execution. If set to a value less  + than one, Git will use as many workers as the number of logical cores  + available. This setting and <code>checkout.thresholdForParallelism</code> affect  + all commands that perform checkout. E.g. checkout, clone, reset,  + sparse-checkout, etc.  +</p>  +<div class="paragraph"><p>Note: parallel checkout usually delivers better performance for repositories  +located on SSDs or over NFS. For repositories on spinning disks and/or machines  +with a small number of cores, the default sequential checkout often performs  +better. The size and compression level of a repository might also influence how  +well the parallel version performs.</p></div>  +</dd>  +<dt class="hdlist1">  +checkout.thresholdForParallelism  +</dt>  +<dd>  +<p>  + When running parallel checkout with a small number of files, the cost  + of subprocess spawning and inter-process communication might outweigh  + the parallelization gains. This setting allows to define the minimum  + number of files for which parallel checkout should be attempted. The  + default is 100.  +</p>  +</dd>  +<dt class="hdlist1">   clean.requireForce   </dt>   <dd>  @@ -6819,6 +6849,16 @@  </p>   </dd>   <dt class="hdlist1">  +index.sparse  +</dt>  +<dd>  +<p>  + When enabled, write the index using sparse-directory entries. This  + has no effect unless <code>core.sparseCheckout</code> and  + <code>core.sparseCheckoutCone</code> are both enabled. Defaults to <em>false</em>.  +</p>  +</dd>  +<dt class="hdlist1">   index.threads   </dt>   <dd>  @@ -6979,6 +7019,16 @@  </p>   </dd>   <dt class="hdlist1">  +log.diffMerges  +</dt>  +<dd>  +<p>  + Set default diff format to be used for merge commits. See  + <code>--diff-merges</code> in <a href="git-log.html">git-log(1)</a> for details.  + Defaults to <code>separate</code>.  +</p>  +</dd>  +<dt class="hdlist1">   log.follow   </dt>   <dd>  @@ -10307,7 +10357,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-25 15:29:19 PST  + 2021-01-26 08:29:19 JST   </div>   </div>   </body>  
diff --git a/git-count-objects.html b/git-count-objects.html index 8a2f46e..ce501f8 100644 --- a/git-count-objects.html +++ b/git-count-objects.html 
@@ -815,7 +815,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-10-17 15:22:26 PDT  + 2016-10-18 07:22:26 JST   </div>   </div>   </body>  
diff --git a/git-credential-cache--daemon.html b/git-credential-cache--daemon.html index adcefec..4abd8d9 100644 --- a/git-credential-cache--daemon.html +++ b/git-credential-cache--daemon.html 
@@ -786,7 +786,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2014-09-26 15:36:58 PDT  + 2014-09-27 07:36:58 JST   </div>   </div>   </body>  
diff --git a/git-credential-cache.html b/git-credential-cache.html index b712954..b70c45f 100644 --- a/git-credential-cache.html +++ b/git-credential-cache.html 
@@ -842,7 +842,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-credential-store.html b/git-credential-store.html index a506e17..04bf7c8 100644 --- a/git-credential-store.html +++ b/git-credential-store.html 
@@ -882,7 +882,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-05-08 15:24:24 PDT  + 2020-05-09 07:24:24 JST   </div>   </div>   </body>  
diff --git a/git-credential.html b/git-credential.html index 525cd66..e6ed855 100644 --- a/git-credential.html +++ b/git-credential.html 
@@ -940,7 +940,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-05-26 11:29:03 PDT  + 2020-05-27 03:29:03 JST   </div>   </div>   </body>  
diff --git a/git-cvsexportcommit.html b/git-cvsexportcommit.html index 3b74804..1c8cc47 100644 --- a/git-cvsexportcommit.html +++ b/git-cvsexportcommit.html 
@@ -951,7 +951,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-cvsimport.html b/git-cvsimport.html index 780ed1b..e6c31e8 100644 --- a/git-cvsimport.html +++ b/git-cvsimport.html 
@@ -1107,7 +1107,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-09-26 16:43:51 PDT  + 2016-09-27 08:43:51 JST   </div>   </div>   </body>  
diff --git a/git-cvsserver.html b/git-cvsserver.html index 4626042..326ef5d 100644 --- a/git-cvsserver.html +++ b/git-cvsserver.html 
@@ -1313,7 +1313,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-daemon.html b/git-daemon.html index 3db9610..e51fd0e 100644 --- a/git-daemon.html +++ b/git-daemon.html 
@@ -1280,7 +1280,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-describe.html b/git-describe.html index cfaf589..206ff9c 100644 --- a/git-describe.html +++ b/git-describe.html 
@@ -1038,7 +1038,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-diff-files.html b/git-diff-files.html index 3c9ea32..072671c 100644 --- a/git-diff-files.html +++ b/git-diff-files.html 
@@ -1142,7 +1142,9 @@  </dt>   <dd>   <p>  - Show only names of changed files.  + Show only names of changed files. The file names are often encoded in UTF-8.  + For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>  + manual page.   </p>   </dd>   <dt class="hdlist1">  @@ -1152,6 +1154,7 @@  <p>   Show only names and status of changed files. See the description   of the <code>--diff-filter</code> option on what the status letters mean.  + Just like <code>--name-only</code> the file names are often encoded in UTF-8.   </p>   </dd>   <dt class="hdlist1">  @@ -2689,7 +2692,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-diff-index.html b/git-diff-index.html index 6bae181..f78cd1a 100644 --- a/git-diff-index.html +++ b/git-diff-index.html 
@@ -1143,7 +1143,9 @@  </dt>   <dd>   <p>  - Show only names of changed files.  + Show only names of changed files. The file names are often encoded in UTF-8.  + For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>  + manual page.   </p>   </dd>   <dt class="hdlist1">  @@ -1153,6 +1155,7 @@  <p>   Show only names and status of changed files. See the description   of the <code>--diff-filter</code> option on what the status letters mean.  + Just like <code>--name-only</code> the file names are often encoded in UTF-8.   </p>   </dd>   <dt class="hdlist1">  @@ -2783,7 +2786,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 14:02:22 PST  + 2020-11-03 07:02:22 JST   </div>   </div>   </body>  
diff --git a/git-diff-tree.html b/git-diff-tree.html index fc76e7b..4d144de 100644 --- a/git-diff-tree.html +++ b/git-diff-tree.html 
@@ -1144,7 +1144,9 @@  </dt>   <dd>   <p>  - Show only names of changed files.  + Show only names of changed files. The file names are often encoded in UTF-8.  + For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>  + manual page.   </p>   </dd>   <dt class="hdlist1">  @@ -1154,6 +1156,7 @@  <p>   Show only names and status of changed files. See the description   of the <code>--diff-filter</code> option on what the status letters mean.  + Just like <code>--name-only</code> the file names are often encoded in UTF-8.   </p>   </dd>   <dt class="hdlist1">  @@ -3926,7 +3929,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 14:02:22 PST  + 2020-11-03 07:02:22 JST   </div>   </div>   </body>  
diff --git a/git-diff.html b/git-diff.html index 2320b66..7cbaef3 100644 --- a/git-diff.html +++ b/git-diff.html 
@@ -1272,7 +1272,9 @@  </dt>   <dd>   <p>  - Show only names of changed files.  + Show only names of changed files. The file names are often encoded in UTF-8.  + For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>  + manual page.   </p>   </dd>   <dt class="hdlist1">  @@ -1282,6 +1284,7 @@  <p>   Show only names and status of changed files. See the description   of the <code>--diff-filter</code> option on what the status letters mean.  + Just like <code>--name-only</code> the file names are often encoded in UTF-8.   </p>   </dd>   <dt class="hdlist1">  @@ -2980,7 +2983,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 14:02:22 PST  + 2020-11-03 07:02:22 JST   </div>   </div>   </body>  
diff --git a/git-difftool.html b/git-difftool.html index 2893f52..2fdee3c 100644 --- a/git-difftool.html +++ b/git-difftool.html 
@@ -1024,7 +1024,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-fast-export.html b/git-fast-export.html index 08958f9..de0bb2e 100644 --- a/git-fast-export.html +++ b/git-fast-export.html 
@@ -1120,7 +1120,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-07-06 22:33:22 PDT  + 2020-07-07 14:33:22 JST   </div>   </div>   </body>  
diff --git a/git-fast-import.html b/git-fast-import.html index 53381ed..bc7a7b6 100644 --- a/git-fast-import.html +++ b/git-fast-import.html 
@@ -2616,7 +2616,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-10-05 15:17:53 PDT  + 2020-10-06 07:17:53 JST   </div>   </div>   </body>  
diff --git a/git-fetch-pack.html b/git-fetch-pack.html index e245001..dca1071 100644 --- a/git-fetch-pack.html +++ b/git-fetch-pack.html 
@@ -974,7 +974,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-fetch.html b/git-fetch.html index 06880c6..4650035 100644 --- a/git-fetch.html +++ b/git-fetch.html 
@@ -978,6 +978,16 @@  </p>   </dd>   <dt class="hdlist1">  +--prefetch  +</dt>  +<dd>  +<p>  + Modify the configured refspec to place all refs into the  + <code>refs/prefetch/</code> namespace. See the <code>prefetch</code> task in  + <a href="git-maintenance.html">git-maintenance(1)</a>.  +</p>  +</dd>  +<dt class="hdlist1">   -p   </dt>   <dt class="hdlist1">  @@ -1977,7 +1987,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-09-03 13:19:53 PDT  + 2020-09-04 05:19:53 JST   </div>   </div>   </body>  
diff --git a/git-filter-branch.html b/git-filter-branch.html index 66001c7..06843da 100644 --- a/git-filter-branch.html +++ b/git-filter-branch.html 
@@ -1626,7 +1626,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-10-26 15:41:26 PDT  + 2020-10-27 07:41:26 JST   </div>   </div>   </body>  
diff --git a/git-fmt-merge-msg.html b/git-fmt-merge-msg.html index 7c45373..1953b10 100644 --- a/git-fmt-merge-msg.html +++ b/git-fmt-merge-msg.html 
@@ -908,7 +908,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-for-each-ref.html b/git-for-each-ref.html index 0dbb45f..2f3699c 100644 --- a/git-for-each-ref.html +++ b/git-for-each-ref.html 
@@ -1324,7 +1324,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-02 23:05:01 PST  + 2021-03-03 16:05:01 JST   </div>   </div>   </body>  
diff --git a/git-for-each-repo.html b/git-for-each-repo.html index b724dd7..453016c 100644 --- a/git-for-each-repo.html +++ b/git-for-each-repo.html 
@@ -812,7 +812,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-18 14:12:24 PST  + 2020-11-19 07:12:24 JST   </div>   </div>   </body>  
diff --git a/git-format-patch.html b/git-format-patch.html index 964cd67..a61d3cd 100644 --- a/git-format-patch.html +++ b/git-format-patch.html 
@@ -2554,7 +2554,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-02 15:10:10 PDT  + 2021-04-03 07:10:10 JST   </div>   </div>   </body>  
diff --git a/git-fsck-objects.html b/git-fsck-objects.html index 8129b86..cc977b3 100644 --- a/git-fsck-objects.html +++ b/git-fsck-objects.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-fsck.html b/git-fsck.html index de2d0fc..fe40cf7 100644 --- a/git-fsck.html +++ b/git-fsck.html 
@@ -1103,7 +1103,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-03 16:00:11 PST  + 2021-02-04 09:00:11 JST   </div>   </div>   </body>  
diff --git a/git-gc.html b/git-gc.html index f974a07..501d032 100644 --- a/git-gc.html +++ b/git-gc.html 
@@ -1165,7 +1165,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-get-tar-commit-id.html b/git-get-tar-commit-id.html index ee2ecbc..184ed9f 100644 --- a/git-get-tar-commit-id.html +++ b/git-get-tar-commit-id.html 
@@ -778,7 +778,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2015-10-26 16:13:38 PDT  + 2015-10-27 08:13:38 JST   </div>   </div>   </body>  
diff --git a/git-grep.html b/git-grep.html index 4940851..5686c91 100644 --- a/git-grep.html +++ b/git-grep.html 
@@ -1469,7 +1469,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-18 14:12:24 PST  + 2020-11-19 07:12:24 JST   </div>   </div>   </body>  
diff --git a/git-gui.html b/git-gui.html index 62a6760..688e6d7 100644 --- a/git-gui.html +++ b/git-gui.html 
@@ -945,7 +945,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-hash-object.html b/git-hash-object.html index 0e8535c..80eff48 100644 --- a/git-hash-object.html +++ b/git-hash-object.html 
@@ -853,7 +853,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-help.html b/git-help.html index d677482..904e7f0 100644 --- a/git-help.html +++ b/git-help.html 
@@ -1011,7 +1011,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-10 16:30:08 PDT  + 2020-08-11 08:30:08 JST   </div>   </div>   </body>  
diff --git a/git-http-backend.html b/git-http-backend.html index b5a7421..c3be17b 100644 --- a/git-http-backend.html +++ b/git-http-backend.html 
@@ -1079,7 +1079,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-http-fetch.html b/git-http-fetch.html index 7e4411a..20437cf 100644 --- a/git-http-fetch.html +++ b/git-http-fetch.html 
@@ -860,7 +860,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-02 23:05:01 PST  + 2021-03-03 16:05:01 JST   </div>   </div>   </body>  
diff --git a/git-http-push.html b/git-http-push.html index d0db43c..ba80273 100644 --- a/git-http-push.html +++ b/git-http-push.html 
@@ -909,7 +909,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-imap-send.html b/git-imap-send.html index 565ae0f..a7bd8f5 100644 --- a/git-imap-send.html +++ b/git-imap-send.html 
@@ -1025,7 +1025,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-09-09 15:23:32 PDT  + 2020-09-10 07:23:32 JST   </div>   </div>   </body>  
diff --git a/git-index-pack.html b/git-index-pack.html index 6169e4a..168ac5c 100644 --- a/git-index-pack.html +++ b/git-index-pack.html 
@@ -958,7 +958,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-02 23:05:01 PST  + 2021-03-03 16:05:01 JST   </div>   </div>   </body>  
diff --git a/git-init-db.html b/git-init-db.html index 5eae98f..ad27360 100644 --- a/git-init-db.html +++ b/git-init-db.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-init.html b/git-init.html index 2db5bed..5521301 100644 --- a/git-init.html +++ b/git-init.html 
@@ -1003,7 +1003,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-12-18 16:26:08 PST  + 2020-12-19 09:26:08 JST   </div>   </div>   </body>  
diff --git a/git-instaweb.html b/git-instaweb.html index 31f3bc2..3fdec6b 100644 --- a/git-instaweb.html +++ b/git-instaweb.html 
@@ -907,7 +907,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-interpret-trailers.html b/git-interpret-trailers.html index 1fdaa25..19fea03 100644 --- a/git-interpret-trailers.html +++ b/git-interpret-trailers.html 
@@ -1255,7 +1255,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-log.html b/git-log.html index 78a5341..64e8631 100644 --- a/git-log.html +++ b/git-log.html 
@@ -3408,7 +3408,7 @@  </p>   </dd>   <dt class="hdlist1">  ---diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc)  +--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc)   </dt>   <dt class="hdlist1">   --no-diff-merges  @@ -3433,6 +3433,24 @@  </p>   </dd>   <dt class="hdlist1">  +--diff-merges=on  +</dt>  +<dt class="hdlist1">  +--diff-merges=m  +</dt>  +<dt class="hdlist1">  +-m  +</dt>  +<dd>  +<p>  + This option makes diff output for merge commits to be shown in  + the default format. <code>-m</code> will produce the output only if <code>-p</code>  + is given as well. The default format could be changed using  + <code>log.diffMerges</code> configuration parameter, which default value  + is <code>separate</code>.  +</p>  +</dd>  +<dt class="hdlist1">   --diff-merges=first-parent   </dt>   <dt class="hdlist1">  @@ -3447,17 +3465,11 @@  <dt class="hdlist1">   --diff-merges=separate   </dt>  -<dt class="hdlist1">  ---diff-merges=m  -</dt>  -<dt class="hdlist1">  --m  -</dt>   <dd>   <p>   This makes merge commits show the full diff with respect to   each of the parents. Separate log entry and diff is generated  - for each parent. <code>-m</code> doesn&#8217;t produce any output without <code>-p</code>.  + for each parent.   </p>   </dd>   <dt class="hdlist1">  @@ -3872,7 +3884,9 @@  </dt>   <dd>   <p>  - Show only names of changed files.  + Show only names of changed files. The file names are often encoded in UTF-8.  + For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>  + manual page.   </p>   </dd>   <dt class="hdlist1">  @@ -3882,6 +3896,7 @@  <p>   Show only names and status of changed files. See the description   of the <code>--diff-filter</code> option on what the status letters mean.  + Just like <code>--name-only</code> the file names are often encoded in UTF-8.   </p>   </dd>   <dt class="hdlist1">  @@ -5279,7 +5294,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-05 17:34:58 PST  + 2021-02-06 10:34:58 JST   </div>   </div>   </body>  
diff --git a/git-ls-files.html b/git-ls-files.html index 27c7e31..815792a 100644 --- a/git-ls-files.html +++ b/git-ls-files.html 
@@ -1231,7 +1231,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-05 17:34:58 PST  + 2021-02-06 10:34:58 JST   </div>   </div>   </body>  
diff --git a/git-ls-remote.html b/git-ls-remote.html index 39d26f9..b9ad170 100644 --- a/git-ls-remote.html +++ b/git-ls-remote.html 
@@ -945,7 +945,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-07-06 22:33:22 PDT  + 2020-07-07 14:33:22 JST   </div>   </div>   </body>  
diff --git a/git-ls-tree.html b/git-ls-tree.html index f0c4203..024ca46 100644 --- a/git-ls-tree.html +++ b/git-ls-tree.html 
@@ -930,7 +930,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-11 14:07:52 PST  + 2020-11-12 07:07:52 JST   </div>   </div>   </body>  
diff --git a/git-mailinfo.html b/git-mailinfo.html index 1d78c7a..44df231 100644 --- a/git-mailinfo.html +++ b/git-mailinfo.html 
@@ -914,7 +914,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-mailsplit.html b/git-mailsplit.html index ee8c8c6..7887ef4 100644 --- a/git-mailsplit.html +++ b/git-mailsplit.html 
@@ -860,7 +860,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-07-06 14:33:48 PDT  + 2016-07-07 06:33:48 JST   </div>   </div>   </body>  
diff --git a/git-maintenance.html b/git-maintenance.html index 639b907..434b53a 100644 --- a/git-maintenance.html +++ b/git-maintenance.html 
@@ -893,10 +893,8 @@  <p>   The <code>prefetch</code> task updates the object directory with the latest   objects from all registered remotes. For each remote, a <code>git fetch</code>  - command is run. The refmap is custom to avoid updating local or remote  - branches (those in <code>refs/heads</code> or <code>refs/remotes</code>). Instead, the  - remote refs are stored in <code>refs/prefetch/&lt;remote&gt;/</code>. Also, tags are  - not updated.  + command is run. The configured refspec is modified to place all  + requested refs within <code>refs/prefetch/</code>. Also, tags are not updated.   </p>   <div class="paragraph"><p>This is done to avoid disrupting the remote-tracking branches. The end users   expect these refs to stay unmoved unless they initiate a fetch. With prefetch  @@ -1186,7 +1184,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-22 16:54:23 PST  + 2021-04-30 15:03:30 JST   </div>   </div>   </body>  
diff --git a/git-maintenance.txt b/git-maintenance.txt index 80ddd33..1e738ad 100644 --- a/git-maintenance.txt +++ b/git-maintenance.txt 
@@ -92,10 +92,8 @@  prefetch:: 	The `prefetch` task updates the object directory with the latest 	objects from all registered remotes. For each remote, a `git fetch` -	command is run. The refmap is custom to avoid updating local or remote -	branches (those in `refs/heads` or `refs/remotes`). Instead, the -	remote refs are stored in `refs/prefetch/<remote>/`. Also, tags are -	not updated. +	command is run. The configured refspec is modified to place all +	requested refs within `refs/prefetch/`. Also, tags are not updated.  +  This is done to avoid disrupting the remote-tracking branches. The end users  expect these refs to stay unmoved unless they initiate a fetch. With prefetch 
diff --git a/git-merge-base.html b/git-merge-base.html index a7a4e37..9af4c01 100644 --- a/git-merge-base.html +++ b/git-merge-base.html 
@@ -1017,7 +1017,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-merge-file.html b/git-merge-file.html index a1a9f85..129e443 100644 --- a/git-merge-file.html +++ b/git-merge-file.html 
@@ -886,7 +886,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2015-10-30 14:57:17 PDT  + 2015-10-31 06:57:17 JST   </div>   </div>   </body>  
diff --git a/git-merge-index.html b/git-merge-index.html index dbf4585..441bedc 100644 --- a/git-merge-index.html +++ b/git-merge-index.html 
@@ -852,7 +852,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-merge-one-file.html b/git-merge-one-file.html index dd931f0..414cb47 100644 --- a/git-merge-one-file.html +++ b/git-merge-one-file.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-merge-tree.html b/git-merge-tree.html index 5fb42b3..ef01648 100644 --- a/git-merge-tree.html +++ b/git-merge-tree.html 
@@ -779,7 +779,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-09-17 14:33:14 PDT  + 2013-09-18 06:33:14 JST   </div>   </div>   </body>  
diff --git a/git-merge.html b/git-merge.html index ea93660..e5fa08d 100644 --- a/git-merge.html +++ b/git-merge.html 
@@ -2151,7 +2151,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-05-08 15:24:24 PDT  + 2020-05-09 07:24:24 JST   </div>   </div>   </body>  
diff --git a/git-mergetool--lib.html b/git-mergetool--lib.html index 258a1aa..5c143ff 100644 --- a/git-mergetool--lib.html +++ b/git-mergetool--lib.html 
@@ -832,7 +832,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-22 16:54:23 PST  + 2021-02-23 09:54:23 JST   </div>   </div>   </body>  
diff --git a/git-mergetool.html b/git-mergetool.html index bcb5715..4ef89ba 100644 --- a/git-mergetool.html +++ b/git-mergetool.html 
@@ -1047,7 +1047,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-17 15:50:25 PDT  + 2021-03-18 07:50:25 JST   </div>   </div>   </body>  
diff --git a/git-mktag.html b/git-mktag.html index f3f61f9..d6c6a96 100644 --- a/git-mktag.html +++ b/git-mktag.html 
@@ -828,7 +828,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-25 15:29:19 PST  + 2021-01-26 08:29:19 JST   </div>   </div>   </body>  
diff --git a/git-mktree.html b/git-mktree.html index afe9e70..dadc3a1 100644 --- a/git-mktree.html +++ b/git-mktree.html 
@@ -811,7 +811,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-multi-pack-index.html b/git-multi-pack-index.html index 004a6ec..e96cee7 100644 --- a/git-multi-pack-index.html +++ b/git-multi-pack-index.html 
@@ -911,7 +911,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-08 14:45:29 PDT  + 2021-04-09 06:45:29 JST   </div>   </div>   </body>  
diff --git a/git-mv.html b/git-mv.html index 2af0eee..7296c02 100644 --- a/git-mv.html +++ b/git-mv.html 
@@ -857,7 +857,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-07-13 14:58:50 PDT  + 2016-07-14 06:58:50 JST   </div>   </div>   </body>  
diff --git a/git-name-rev.html b/git-name-rev.html index 7899797..c39d702 100644 --- a/git-name-rev.html +++ b/git-name-rev.html 
@@ -881,7 +881,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-notes.html b/git-notes.html index e478629..47a1cc7 100644 --- a/git-notes.html +++ b/git-notes.html 
@@ -1344,7 +1344,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-10 16:30:08 PDT  + 2020-08-11 08:30:08 JST   </div>   </div>   </body>  
diff --git a/git-p4.html b/git-p4.html index cf1543f..3efbc70 100644 --- a/git-p4.html +++ b/git-p4.html 
@@ -1923,7 +1923,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-15 16:12:09 PST  + 2021-01-16 09:12:09 JST   </div>   </div>   </body>  
diff --git a/git-pack-objects.html b/git-pack-objects.html index 336b392..bfafb45 100644 --- a/git-pack-objects.html +++ b/git-pack-objects.html 
@@ -1352,7 +1352,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-24 15:15:46 PDT  + 2021-03-25 07:15:46 JST   </div>   </div>   </body>  
diff --git a/git-pack-redundant.html b/git-pack-redundant.html index 525ee9c..ab3e0b2 100644 --- a/git-pack-redundant.html +++ b/git-pack-redundant.html 
@@ -819,7 +819,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-pack-refs.html b/git-pack-refs.html index e0982e6..830cde0 100644 --- a/git-pack-refs.html +++ b/git-pack-refs.html 
@@ -831,7 +831,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-patch-id.html b/git-patch-id.html index 92a2262..a167a9f 100644 --- a/git-patch-id.html +++ b/git-patch-id.html 
@@ -837,7 +837,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2017-08-04 09:39:17 PDT  + 2017-08-05 01:39:17 JST   </div>   </div>   </body>  
diff --git a/git-prune-packed.html b/git-prune-packed.html index 1c65968..59534cc 100644 --- a/git-prune-packed.html +++ b/git-prune-packed.html 
@@ -814,7 +814,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2014-10-20 14:13:43 PDT  + 2014-10-21 06:13:43 JST   </div>   </div>   </body>  
diff --git a/git-prune.html b/git-prune.html index ed4711b..f6ef946 100644 --- a/git-prune.html +++ b/git-prune.html 
@@ -884,7 +884,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-pull.html b/git-pull.html index 77222c0..78f9bdf 100644 --- a/git-pull.html +++ b/git-pull.html 
@@ -1314,6 +1314,16 @@  </p>   </dd>   <dt class="hdlist1">  +--prefetch  +</dt>  +<dd>  +<p>  + Modify the configured refspec to place all refs into the  + <code>refs/prefetch/</code> namespace. See the <code>prefetch</code> task in  + <a href="git-maintenance.html">git-maintenance(1)</a>.  +</p>  +</dd>  +<dt class="hdlist1">   -p   </dt>   <dt class="hdlist1">  @@ -2240,7 +2250,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-04-29 16:59:10 PDT  + 2020-04-30 08:59:10 JST   </div>   </div>   </body>  
diff --git a/git-push.html b/git-push.html index 3b37579..e999b6d 100644 --- a/git-push.html +++ b/git-push.html 
@@ -1971,7 +1971,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-24 15:15:46 PDT  + 2021-03-25 07:15:46 JST   </div>   </div>   </body>  
diff --git a/git-quiltimport.html b/git-quiltimport.html index 2c0bb55..05612c5 100644 --- a/git-quiltimport.html +++ b/git-quiltimport.html 
@@ -841,7 +841,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-range-diff.html b/git-range-diff.html index b6232ce..806beb6 100644 --- a/git-range-diff.html +++ b/git-range-diff.html 
@@ -1082,7 +1082,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-22 16:54:23 PST  + 2021-02-23 09:54:23 JST   </div>   </div>   </body>  
diff --git a/git-read-tree.html b/git-read-tree.html index 2677196..f25f732 100644 --- a/git-read-tree.html +++ b/git-read-tree.html 
@@ -1306,7 +1306,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-04-29 14:18:27 PDT  + 2020-04-30 06:18:27 JST   </div>   </div>   </body>  
diff --git a/git-rebase.html b/git-rebase.html index 467b503..b5821bf 100644 --- a/git-rebase.html +++ b/git-rebase.html 
@@ -2758,7 +2758,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-26 15:44:23 PDT  + 2021-03-27 07:44:23 JST   </div>   </div>   </body>  
diff --git a/git-receive-pack.html b/git-receive-pack.html index 5dadab0..033693c 100644 --- a/git-receive-pack.html +++ b/git-receive-pack.html 
@@ -1084,7 +1084,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-reflog.html b/git-reflog.html index c266148..ff3bf77 100644 --- a/git-reflog.html +++ b/git-reflog.html 
@@ -929,7 +929,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-remote-ext.html b/git-remote-ext.html index fdb9d8c..aa4966a 100644 --- a/git-remote-ext.html +++ b/git-remote-ext.html 
@@ -963,7 +963,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-remote-fd.html b/git-remote-fd.html index 37b6f48..71dd637 100644 --- a/git-remote-fd.html +++ b/git-remote-fd.html 
@@ -843,7 +843,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-remote-helpers.html b/git-remote-helpers.html index 0505934..6c3c408 100644 --- a/git-remote-helpers.html +++ b/git-remote-helpers.html 
@@ -750,7 +750,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-remote.html b/git-remote.html index 51129fe..99b4e39 100644 --- a/git-remote.html +++ b/git-remote.html 
@@ -1055,7 +1055,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-09 14:46:20 PST  + 2020-11-10 07:46:20 JST   </div>   </div>   </body>  
diff --git a/git-repack.html b/git-repack.html index 807d413..980cffd 100644 --- a/git-repack.html +++ b/git-repack.html 
@@ -1070,7 +1070,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-24 15:15:46 PDT  + 2021-03-25 07:15:46 JST   </div>   </div>   </body>  
diff --git a/git-replace.html b/git-replace.html index 625cd6e..b323b6c 100644 --- a/git-replace.html +++ b/git-replace.html 
@@ -971,7 +971,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-request-pull.html b/git-request-pull.html index 1251abb..22a238a 100644 --- a/git-request-pull.html +++ b/git-request-pull.html 
@@ -855,7 +855,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-rerere.html b/git-rerere.html index f1e6580..48c8293 100644 --- a/git-rerere.html +++ b/git-rerere.html 
@@ -990,7 +990,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-reset.html b/git-reset.html index 83c4f81..6c3e38f 100644 --- a/git-reset.html +++ b/git-reset.html 
@@ -1499,7 +1499,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-04-29 14:18:27 PDT  + 2020-04-30 06:18:27 JST   </div>   </div>   </body>  
diff --git a/git-restore.html b/git-restore.html index a60693b..a434323 100644 --- a/git-restore.html +++ b/git-restore.html 
@@ -1074,7 +1074,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-10-27 15:58:27 PDT  + 2020-10-28 07:58:27 JST   </div>   </div>   </body>  
diff --git a/git-rev-list.html b/git-rev-list.html index f6c134e..ed49781 100644 --- a/git-rev-list.html +++ b/git-rev-list.html 
@@ -3593,7 +3593,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-rev-parse.html b/git-rev-parse.html index 6ab2899..e6739d6 100644 --- a/git-rev-parse.html +++ b/git-rev-parse.html 
@@ -2045,7 +2045,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-15 16:12:09 PST  + 2021-01-16 09:12:09 JST   </div>   </div>   </body>  
diff --git a/git-revert.html b/git-revert.html index 89486b5..f540973 100644 --- a/git-revert.html +++ b/git-revert.html 
@@ -1022,7 +1022,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 14:02:22 PST  + 2020-11-03 07:02:22 JST   </div>   </div>   </body>  
diff --git a/git-rm.html b/git-rm.html index 28d8f95..9298e14 100644 --- a/git-rm.html +++ b/git-rm.html 
@@ -1020,7 +1020,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-send-email.html b/git-send-email.html index c603a27..eabc3b5 100644 --- a/git-send-email.html +++ b/git-send-email.html 
@@ -1631,7 +1631,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-25 15:29:19 PST  + 2021-01-26 08:29:19 JST   </div>   </div>   </body>  
diff --git a/git-send-pack.html b/git-send-pack.html index dd2ef90..40cf93e 100644 --- a/git-send-pack.html +++ b/git-send-pack.html 
@@ -993,7 +993,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-sh-i18n--envsubst.html b/git-sh-i18n--envsubst.html index a49bda3..43c4f7a 100644 --- a/git-sh-i18n--envsubst.html +++ b/git-sh-i18n--envsubst.html 
@@ -785,7 +785,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-sh-i18n.html b/git-sh-i18n.html index 603089e..34972a0 100644 --- a/git-sh-i18n.html +++ b/git-sh-i18n.html 
@@ -807,7 +807,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-sh-setup.html b/git-sh-setup.html index 5c19dca..4c369bc 100644 --- a/git-sh-setup.html +++ b/git-sh-setup.html 
@@ -902,7 +902,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-06-27 11:04:05 PDT  + 2016-06-28 03:04:05 JST   </div>   </div>   </body>  
diff --git a/git-shell.html b/git-shell.html index dba8847..d9938c3 100644 --- a/git-shell.html +++ b/git-shell.html 
@@ -873,7 +873,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-shortlog.html b/git-shortlog.html index e46788e..54b38ab 100644 --- a/git-shortlog.html +++ b/git-shortlog.html 
@@ -1956,7 +1956,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-22 16:54:23 PST  + 2021-02-23 09:54:23 JST   </div>   </div>   </body>  
diff --git a/git-show-branch.html b/git-show-branch.html index fd92986..5577bd9 100644 --- a/git-show-branch.html +++ b/git-show-branch.html 
@@ -1047,7 +1047,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-show-index.html b/git-show-index.html index 0a158cc..bd12264 100644 --- a/git-show-index.html +++ b/git-show-index.html 
@@ -824,7 +824,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-24 15:54:20 PDT  + 2020-08-25 07:54:20 JST   </div>   </div>   </body>  
diff --git a/git-show-ref.html b/git-show-ref.html index 7f58a66..046742c 100644 --- a/git-show-ref.html +++ b/git-show-ref.html 
@@ -977,7 +977,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-show.html b/git-show.html index 3c4fdce..a7ba39e 100644 --- a/git-show.html +++ b/git-show.html 
@@ -1934,7 +1934,7 @@  </p>   </dd>   <dt class="hdlist1">  ---diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc)  +--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc)   </dt>   <dt class="hdlist1">   --no-diff-merges  @@ -1959,6 +1959,24 @@  </p>   </dd>   <dt class="hdlist1">  +--diff-merges=on  +</dt>  +<dt class="hdlist1">  +--diff-merges=m  +</dt>  +<dt class="hdlist1">  +-m  +</dt>  +<dd>  +<p>  + This option makes diff output for merge commits to be shown in  + the default format. <code>-m</code> will produce the output only if <code>-p</code>  + is given as well. The default format could be changed using  + <code>log.diffMerges</code> configuration parameter, which default value  + is <code>separate</code>.  +</p>  +</dd>  +<dt class="hdlist1">   --diff-merges=first-parent   </dt>   <dt class="hdlist1">  @@ -1973,17 +1991,11 @@  <dt class="hdlist1">   --diff-merges=separate   </dt>  -<dt class="hdlist1">  ---diff-merges=m  -</dt>  -<dt class="hdlist1">  --m  -</dt>   <dd>   <p>   This makes merge commits show the full diff with respect to   each of the parents. Separate log entry and diff is generated  - for each parent. <code>-m</code> doesn&#8217;t produce any output without <code>-p</code>.  + for each parent.   </p>   </dd>   <dt class="hdlist1">  @@ -2398,7 +2410,9 @@  </dt>   <dd>   <p>  - Show only names of changed files.  + Show only names of changed files. The file names are often encoded in UTF-8.  + For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>  + manual page.   </p>   </dd>   <dt class="hdlist1">  @@ -2408,6 +2422,7 @@  <p>   Show only names and status of changed files. See the description   of the <code>--diff-filter</code> option on what the status letters mean.  + Just like <code>--name-only</code> the file names are often encoded in UTF-8.   </p>   </dd>   <dt class="hdlist1">  @@ -3658,7 +3673,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-05 17:34:58 PST  + 2021-02-06 10:34:58 JST   </div>   </div>   </body>  
diff --git a/git-sparse-checkout.html b/git-sparse-checkout.html index 893530e..3181cc4 100644 --- a/git-sparse-checkout.html +++ b/git-sparse-checkout.html 
@@ -794,6 +794,18 @@  <div class="paragraph"><p>When <code>--cone</code> is provided, the <code>core.sparseCheckoutCone</code> setting is   also set, allowing for better performance with a limited set of   patterns (see <em>CONE PATTERN SET</em> below).</p></div>  +<div class="paragraph"><p>Use the <code>--[no-]sparse-index</code> option to toggle the use of the sparse  +index format. This reduces the size of the index to be more closely  +aligned with your sparse-checkout definition. This can have significant  +performance advantages for commands such as <code>git status</code> or <code>git add</code>.  +This feature is still experimental. Some commands might be slower with  +a sparse index until they are properly integrated with the feature.</p></div>  +<div class="paragraph"><p><strong>WARNING:</strong> Using a sparse index requires modifying the index in a way  +that is not completely understood by external tools. If you have trouble  +with this compatibility, then run <code>git sparse-checkout init --no-sparse-index</code>  +to rewrite your index to not be sparse. Older versions of Git will not  +understand the sparse directory entries index extension and may fail to  +interact with your repository until it is disabled.</p></div>   </dd>   <dt class="hdlist1">   <em>set</em>  @@ -1009,7 +1021,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-06-22 16:55:13 PDT  + 2021-04-30 15:03:30 JST   </div>   </div>   </body>  
diff --git a/git-sparse-checkout.txt b/git-sparse-checkout.txt index a0eeaeb..fdcf43f 100644 --- a/git-sparse-checkout.txt +++ b/git-sparse-checkout.txt 
@@ -45,6 +45,20 @@  When `--cone` is provided, the `core.sparseCheckoutCone` setting is  also set, allowing for better performance with a limited set of  patterns (see 'CONE PATTERN SET' below). ++ +Use the `--[no-]sparse-index` option to toggle the use of the sparse +index format. This reduces the size of the index to be more closely +aligned with your sparse-checkout definition. This can have significant +performance advantages for commands such as `git status` or `git add`. +This feature is still experimental. Some commands might be slower with +a sparse index until they are properly integrated with the feature. ++ +**WARNING:** Using a sparse index requires modifying the index in a way +that is not completely understood by external tools. If you have trouble +with this compatibility, then run `git sparse-checkout init --no-sparse-index` +to rewrite your index to not be sparse. Older versions of Git will not +understand the sparse directory entries index extension and may fail to +interact with your repository until it is disabled.    'set':: 	Write a set of patterns to the sparse-checkout file, as given as 
diff --git a/git-stage.html b/git-stage.html index 506e612..6c2d976 100644 --- a/git-stage.html +++ b/git-stage.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2014-10-20 14:13:43 PDT  + 2014-10-21 06:13:43 JST   </div>   </div>   </body>  
diff --git a/git-stash.html b/git-stash.html index 9318b12..d95469d 100644 --- a/git-stash.html +++ b/git-stash.html 
@@ -1245,7 +1245,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-22 14:17:33 PDT  + 2021-03-23 06:17:33 JST   </div>   </div>   </body>  
diff --git a/git-status.html b/git-status.html index 8035b75..f4623f8 100644 --- a/git-status.html +++ b/git-status.html 
@@ -1361,7 +1361,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-stripspace.html b/git-stripspace.html index 8b27dd5..4db3ac3 100644 --- a/git-stripspace.html +++ b/git-stripspace.html 
@@ -876,7 +876,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2015-10-26 16:13:38 PDT  + 2015-10-27 08:13:38 JST   </div>   </div>   </body>  
diff --git a/git-submodule.html b/git-submodule.html index c32b9a4..11bfd82 100644 --- a/git-submodule.html +++ b/git-submodule.html 
@@ -1407,7 +1407,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-07-06 22:33:22 PDT  + 2020-07-07 14:33:22 JST   </div>   </div>   </body>  
diff --git a/git-svn.html b/git-svn.html index c198485..490412d 100644 --- a/git-svn.html +++ b/git-svn.html 
@@ -2517,7 +2517,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 14:02:22 PST  + 2020-11-03 07:02:22 JST   </div>   </div>   </body>  
diff --git a/git-switch.html b/git-switch.html index d27186c..22a8180 100644 --- a/git-switch.html +++ b/git-switch.html 
@@ -1127,7 +1127,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-10-27 15:58:27 PDT  + 2020-10-28 07:58:27 JST   </div>   </div>   </body>  
diff --git a/git-symbolic-ref.html b/git-symbolic-ref.html index 4264537..a83bb9b 100644 --- a/git-symbolic-ref.html +++ b/git-symbolic-ref.html 
@@ -847,7 +847,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-tag.html b/git-tag.html index 61c853b..33d5f88 100644 --- a/git-tag.html +++ b/git-tag.html 
@@ -1339,7 +1339,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/git-unpack-file.html b/git-unpack-file.html index 44bf6db..ef61ee5 100644 --- a/git-unpack-file.html +++ b/git-unpack-file.html 
@@ -788,7 +788,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git-unpack-objects.html b/git-unpack-objects.html index e623a7a..b49625d 100644 --- a/git-unpack-objects.html +++ b/git-unpack-objects.html 
@@ -830,7 +830,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-09-12 17:53:34 PDT  + 2016-09-13 09:53:34 JST   </div>   </div>   </body>  
diff --git a/git-update-index.html b/git-update-index.html index 7f44b70..ef127e9 100644 --- a/git-update-index.html +++ b/git-update-index.html 
@@ -1518,7 +1518,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-25 15:29:19 PST  + 2021-01-26 08:29:19 JST   </div>   </div>   </body>  
diff --git a/git-update-ref.html b/git-update-ref.html index db27f94..22bef61 100644 --- a/git-update-ref.html +++ b/git-update-ref.html 
@@ -974,7 +974,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-12-08 16:10:07 PST  + 2020-12-09 09:10:07 JST   </div>   </div>   </body>  
diff --git a/git-update-server-info.html b/git-update-server-info.html index b985798..99ffe8b 100644 --- a/git-update-server-info.html +++ b/git-update-server-info.html 
@@ -795,7 +795,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-upload-archive.html b/git-upload-archive.html index f3e825c..b077afe 100644 --- a/git-upload-archive.html +++ b/git-upload-archive.html 
@@ -832,7 +832,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2015-10-29 14:44:28 PDT  + 2015-10-30 06:44:28 JST   </div>   </div>   </body>  
diff --git a/git-upload-pack.html b/git-upload-pack.html index bceb323..ba242df 100644 --- a/git-upload-pack.html +++ b/git-upload-pack.html 
@@ -834,7 +834,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-var.html b/git-var.html index b903ada..7bd3e3c 100644 --- a/git-var.html +++ b/git-var.html 
@@ -856,7 +856,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-verify-commit.html b/git-verify-commit.html index cdc047b..2709ee5 100644 --- a/git-verify-commit.html +++ b/git-verify-commit.html 
@@ -806,7 +806,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-06-27 11:04:05 PDT  + 2016-06-28 03:04:05 JST   </div>   </div>   </body>  
diff --git a/git-verify-pack.html b/git-verify-pack.html index 2562ee1..ff2bb5f 100644 --- a/git-verify-pack.html +++ b/git-verify-pack.html 
@@ -836,7 +836,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2015-05-22 13:47:07 PDT  + 2015-05-23 05:47:07 JST   </div>   </div>   </body>  
diff --git a/git-verify-tag.html b/git-verify-tag.html index 75e9ee1..a23a783 100644 --- a/git-verify-tag.html +++ b/git-verify-tag.html 
@@ -806,7 +806,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2017-01-31 14:00:53 PST  + 2017-02-01 07:00:53 JST   </div>   </div>   </body>  
diff --git a/git-web--browse.html b/git-web--browse.html index 4faabd1..c088f7b 100644 --- a/git-web--browse.html +++ b/git-web--browse.html 
@@ -964,7 +964,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/git-whatchanged.html b/git-whatchanged.html index 99e6e5d..28f879a 100644 --- a/git-whatchanged.html +++ b/git-whatchanged.html 
@@ -803,7 +803,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-30 16:51:59 PDT  + 2013-08-31 08:51:59 JST   </div>   </div>   </body>  
diff --git a/git-worktree.html b/git-worktree.html index bdd1df1..4b550a2 100644 --- a/git-worktree.html +++ b/git-worktree.html 
@@ -1360,7 +1360,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-10 15:27:55 PST  + 2021-02-11 08:27:55 JST   </div>   </div>   </body>  
diff --git a/git-write-tree.html b/git-write-tree.html index cd6b1a4..e5f6e53 100644 --- a/git-write-tree.html +++ b/git-write-tree.html 
@@ -805,7 +805,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/git.html b/git.html index be88852..e5a09c3 100644 --- a/git.html +++ b/git.html 
@@ -3613,7 +3613,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/gitattributes.html b/gitattributes.html index 249f123..f1c4922 100644 --- a/gitattributes.html +++ b/gitattributes.html 
@@ -1677,6 +1677,11 @@  </li>   <li>   <p>  +<code>scheme</code> suitable for source code in the Scheme language.  +</p>  +</li>  +<li>  +<p>   <code>tex</code> suitable for source code for LaTeX documents.   </p>   </li>  @@ -2182,7 +2187,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-22 14:17:33 PDT  + 2021-04-30 15:03:30 JST   </div>   </div>   </body>  
diff --git a/gitattributes.txt b/gitattributes.txt index 0a60472..cfcfa80 100644 --- a/gitattributes.txt +++ b/gitattributes.txt 
@@ -845,6 +845,8 @@    - `rust` suitable for source code in the Rust language.   +- `scheme` suitable for source code in the Scheme language. +  - `tex` suitable for source code for LaTeX documents.     
diff --git a/gitcli.html b/gitcli.html index 65322cb..a4538ad 100644 --- a/gitcli.html +++ b/gitcli.html 
@@ -1040,7 +1040,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 14:26:57 PDT  + 2020-03-12 06:26:57 JST   </div>   </div>   </body>  
diff --git a/gitcore-tutorial.html b/gitcore-tutorial.html index ff3309c..2b7c718 100644 --- a/gitcore-tutorial.html +++ b/gitcore-tutorial.html 
@@ -2458,7 +2458,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/gitcredentials.html b/gitcredentials.html index 0a227f6..c3d2279 100644 --- a/gitcredentials.html +++ b/gitcredentials.html 
@@ -1106,7 +1106,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-10 16:30:08 PDT  + 2020-08-11 08:30:08 JST   </div>   </div>   </body>  
diff --git a/gitcvs-migration.html b/gitcvs-migration.html index 7967680..d703164 100644 --- a/gitcvs-migration.html +++ b/gitcvs-migration.html 
@@ -957,7 +957,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2017-02-15 15:17:51 PST  + 2017-02-16 08:17:51 JST   </div>   </div>   </body>  
diff --git a/gitdiffcore.html b/gitdiffcore.html index 0f83ea5..0101065 100644 --- a/gitdiffcore.html +++ b/gitdiffcore.html 
@@ -1108,7 +1108,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-22 14:17:33 PDT  + 2021-03-23 06:17:33 JST   </div>   </div>   </body>  
diff --git a/giteveryday.html b/giteveryday.html index bb922d7..ae076e4 100644 --- a/giteveryday.html +++ b/giteveryday.html 
@@ -1546,7 +1546,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-07-06 22:33:22 PDT  + 2020-07-07 14:33:22 JST   </div>   </div>   </body>  
diff --git a/gitfaq.html b/gitfaq.html index 90af707..3f9ef4f 100644 --- a/gitfaq.html +++ b/gitfaq.html 
@@ -1262,7 +1262,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-09-29 14:47:55 PDT  + 2020-09-30 06:47:55 JST   </div>   </div>   </body>  
diff --git a/gitglossary.html b/gitglossary.html index 52bb5d5..a486745 100644 --- a/gitglossary.html +++ b/gitglossary.html 
@@ -1921,7 +1921,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2017-02-15 15:17:51 PST  + 2017-02-16 08:17:51 JST   </div>   </div>   </body>  
diff --git a/githooks.html b/githooks.html index 4d422de..38cfaa9 100644 --- a/githooks.html +++ b/githooks.html 
@@ -1377,7 +1377,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-22 14:17:33 PDT  + 2021-03-23 06:17:33 JST   </div>   </div>   </body>  
diff --git a/gitignore.html b/gitignore.html index 876bf28..850cb99 100644 --- a/gitignore.html +++ b/gitignore.html 
@@ -1069,7 +1069,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-22 14:17:33 PDT  + 2021-03-23 06:17:33 JST   </div>   </div>   </body>  
diff --git a/gitk.html b/gitk.html index 8b06f19..2365db7 100644 --- a/gitk.html +++ b/gitk.html 
@@ -1101,7 +1101,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-18 14:12:24 PST  + 2020-11-19 07:12:24 JST   </div>   </div>   </body>  
diff --git a/gitmailmap.html b/gitmailmap.html index 35f1707..7e1a490 100644 --- a/gitmailmap.html +++ b/gitmailmap.html 
@@ -884,7 +884,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/gitmodules.html b/gitmodules.html index 625bc0d..2e5d2c8 100644 --- a/gitmodules.html +++ b/gitmodules.html 
@@ -938,7 +938,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-15 16:12:09 PST  + 2021-01-16 09:12:09 JST   </div>   </div>   </body>  
diff --git a/gitnamespaces.html b/gitnamespaces.html index 794c2e3..a1f9bff 100644 --- a/gitnamespaces.html +++ b/gitnamespaces.html 
@@ -844,7 +844,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2017-01-10 15:42:58 PST  + 2017-01-11 08:42:58 JST   </div>   </div>   </body>  
diff --git a/gitremote-helpers.html b/gitremote-helpers.html index e788059..f505c45 100644 --- a/gitremote-helpers.html +++ b/gitremote-helpers.html 
@@ -1518,7 +1518,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-07-06 22:33:22 PDT  + 2020-07-07 14:33:22 JST   </div>   </div>   </body>  
diff --git a/gitrepository-layout.html b/gitrepository-layout.html index 53e0522..b3bfa9a 100644 --- a/gitrepository-layout.html +++ b/gitrepository-layout.html 
@@ -1372,7 +1372,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/gitrevisions.html b/gitrevisions.html index 23a1a49..f0cf521 100644 --- a/gitrevisions.html +++ b/gitrevisions.html 
@@ -1324,7 +1324,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/gitsubmodules.html b/gitsubmodules.html index 70dd427..23e98dc 100644 --- a/gitsubmodules.html +++ b/gitsubmodules.html 
@@ -1113,7 +1113,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-10-05 15:17:53 PDT  + 2020-10-06 07:17:53 JST   </div>   </div>   </body>  
diff --git a/gittutorial-2.html b/gittutorial-2.html index adb66df..b050d37 100644 --- a/gittutorial-2.html +++ b/gittutorial-2.html 
@@ -1171,7 +1171,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/gittutorial.html b/gittutorial.html index 1914190..91cf0bc 100644 --- a/gittutorial.html +++ b/gittutorial.html 
@@ -1375,7 +1375,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/gitweb.conf.html b/gitweb.conf.html index bdf9d94..90cc8ee 100644 --- a/gitweb.conf.html +++ b/gitweb.conf.html 
@@ -2015,7 +2015,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-13 17:34:18 PDT  + 2021-04-14 09:34:18 JST   </div>   </div>   </body>  
diff --git a/gitweb.html b/gitweb.html index 9fa10d1..ff428c3 100644 --- a/gitweb.html +++ b/gitweb.html 
@@ -1642,7 +1642,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/gitworkflows.html b/gitworkflows.html index f188ee4..9e711aa 100644 --- a/gitworkflows.html +++ b/gitworkflows.html 
@@ -1225,7 +1225,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-07-18 17:57:39 PDT  + 2020-07-19 09:57:39 JST   </div>   </div>   </body>  
diff --git a/howto/coordinate-embargoed-releases.html b/howto/coordinate-embargoed-releases.html index 8068c7d..7e9b9d7 100644 --- a/howto/coordinate-embargoed-releases.html +++ b/howto/coordinate-embargoed-releases.html 
@@ -873,7 +873,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:14 PDT  + 2021-04-30 15:04:59 JST   </div>   </div>   </body>  
diff --git a/howto/keep-canonical-history-correct.html b/howto/keep-canonical-history-correct.html index 422f665..7435aa8 100644 --- a/howto/keep-canonical-history-correct.html +++ b/howto/keep-canonical-history-correct.html 
@@ -938,7 +938,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:13 PDT  + 2021-04-30 15:04:59 JST   </div>   </div>   </body>  
diff --git a/howto/maintain-git.html b/howto/maintain-git.html index 14c705e..8370340 100644 --- a/howto/maintain-git.html +++ b/howto/maintain-git.html 
@@ -1469,7 +1469,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:14 PDT  + 2021-04-30 15:04:59 JST   </div>   </div>   </body>  
diff --git a/howto/new-command.html b/howto/new-command.html index 995c07d..74093a4 100644 --- a/howto/new-command.html +++ b/howto/new-command.html 
@@ -863,7 +863,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:09 PDT  + 2021-04-30 15:04:53 JST   </div>   </div>   </body>  
diff --git a/howto/rebase-from-internal-branch.html b/howto/rebase-from-internal-branch.html index 8cd7e68..5621547 100644 --- a/howto/rebase-from-internal-branch.html +++ b/howto/rebase-from-internal-branch.html 
@@ -895,7 +895,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:13 PDT  + 2021-04-30 15:04:59 JST   </div>   </div>   </body>  
diff --git a/howto/rebuild-from-update-hook.html b/howto/rebuild-from-update-hook.html index 0e42c77..470bef0 100644 --- a/howto/rebuild-from-update-hook.html +++ b/howto/rebuild-from-update-hook.html 
@@ -847,7 +847,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:13 PDT  + 2021-04-30 15:04:58 JST   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-blob-object.html b/howto/recover-corrupted-blob-object.html index ce339e0..c83e5be 100644 --- a/howto/recover-corrupted-blob-object.html +++ b/howto/recover-corrupted-blob-object.html 
@@ -880,7 +880,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:12 PDT  + 2021-04-30 15:04:57 JST   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-object-harder.html b/howto/recover-corrupted-object-harder.html index df6ebca..372365d 100644 --- a/howto/recover-corrupted-object-harder.html +++ b/howto/recover-corrupted-object-harder.html 
@@ -1189,7 +1189,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:13 PDT  + 2021-04-30 15:04:58 JST   </div>   </div>   </body>  
diff --git a/howto/revert-a-faulty-merge.html b/howto/revert-a-faulty-merge.html index 55cfa5a..84b673a 100644 --- a/howto/revert-a-faulty-merge.html +++ b/howto/revert-a-faulty-merge.html 
@@ -1025,7 +1025,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:12 PDT  + 2021-04-30 15:04:57 JST   </div>   </div>   </body>  
diff --git a/howto/revert-branch-rebase.html b/howto/revert-branch-rebase.html index 8303263..54150bf 100644 --- a/howto/revert-branch-rebase.html +++ b/howto/revert-branch-rebase.html 
@@ -907,7 +907,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:09 PDT  + 2021-04-30 15:04:53 JST   </div>   </div>   </body>  
diff --git a/howto/separating-topic-branches.html b/howto/separating-topic-branches.html index 23fd4f3..aad0aef 100644 --- a/howto/separating-topic-branches.html +++ b/howto/separating-topic-branches.html 
@@ -841,7 +841,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:11 PDT  + 2021-04-30 15:04:56 JST   </div>   </div>   </body>  
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html index 1a99cb6..90a3de1 100644 --- a/howto/setup-git-server-over-http.html +++ b/howto/setup-git-server-over-http.html 
@@ -1071,7 +1071,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:11 PDT  + 2021-04-30 15:04:56 JST   </div>   </div>   </body>  
diff --git a/howto/update-hook-example.html b/howto/update-hook-example.html index c342ca3..7e53563 100644 --- a/howto/update-hook-example.html +++ b/howto/update-hook-example.html 
@@ -930,7 +930,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:10 PDT  + 2021-04-30 15:04:55 JST   </div>   </div>   </body>  
diff --git a/howto/use-git-daemon.html b/howto/use-git-daemon.html index c5442b6..8d66c93 100644 --- a/howto/use-git-daemon.html +++ b/howto/use-git-daemon.html 
@@ -791,7 +791,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:10 PDT  + 2021-04-30 15:04:55 JST   </div>   </div>   </body>  
diff --git a/howto/using-merge-subtree.html b/howto/using-merge-subtree.html index ca1f2de..12896dd 100644 --- a/howto/using-merge-subtree.html +++ b/howto/using-merge-subtree.html 
@@ -848,7 +848,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:09 PDT  + 2021-04-30 15:04:54 JST   </div>   </div>   </body>  
diff --git a/howto/using-signed-tag-in-pull-request.html b/howto/using-signed-tag-in-pull-request.html index fae3f9e..832af20 100644 --- a/howto/using-signed-tag-in-pull-request.html +++ b/howto/using-signed-tag-in-pull-request.html 
@@ -952,7 +952,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-16 15:13:10 PDT  + 2021-04-30 15:04:54 JST   </div>   </div>   </body>  
diff --git a/technical/api-error-handling.html b/technical/api-error-handling.html index b3058e0..ec6b339 100644 --- a/technical/api-error-handling.html +++ b/technical/api-error-handling.html 
@@ -739,11 +739,17 @@  <div id="content">   <div id="preamble">   <div class="sectionbody">  -<div class="paragraph"><p><code>die</code>, <code>usage</code>, <code>error</code>, and <code>warning</code> report errors of various  -kinds.</p></div>  +<div class="paragraph"><p><code>BUG</code>, <code>die</code>, <code>usage</code>, <code>error</code>, and <code>warning</code> report errors of  +various kinds.</p></div>   <div class="ulist"><ul>   <li>   <p>  +<code>BUG</code> is for failed internal assertions that should never happen,  + i.e. a bug in git itself.  +</p>  +</li>  +<li>  +<p>   <code>die</code> is for fatal application errors. It prints a message to   the user and exits with status 128.   </p>  @@ -771,6 +777,8 @@  </p>   </li>   </ul></div>  +<div class="paragraph"><p>These reports will be logged via the trace2 facility. See the "error"  +event in <a href="api-trace2.txt">trace2 API</a>.</p></div>   </div>   </div>   <div class="sect1">  @@ -849,7 +857,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2015-03-28 11:17:28 PDT  + 2021-04-30 15:03:30 JST   </div>   </div>   </body>  
diff --git a/technical/api-error-handling.txt b/technical/api-error-handling.txt index ceeedd4..8be4f4d 100644 --- a/technical/api-error-handling.txt +++ b/technical/api-error-handling.txt 
@@ -1,8 +1,11 @@  Error reporting in git  ======================   -`die`, `usage`, `error`, and `warning` report errors of various -kinds. +`BUG`, `die`, `usage`, `error`, and `warning` report errors of +various kinds. + +- `BUG` is for failed internal assertions that should never happen, + i.e. a bug in git itself.    - `die` is for fatal application errors. It prints a message to  the user and exits with status 128. @@ -20,6 +23,9 @@  without running into too many problems. Like `error`, it  returns -1 after reporting the situation to the caller.   +These reports will be logged via the trace2 facility. See the "error" +event in link:api-trace2.txt[trace2 API]. +  Customizable error handlers  ---------------------------   
diff --git a/technical/api-index.html b/technical/api-index.html index d820c3a..72f03a4 100644 --- a/technical/api-index.html +++ b/technical/api-index.html 
@@ -775,7 +775,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-02 15:10:16 PDT  + 2021-04-03 07:10:16 JST   </div>   </div>   </body>  
diff --git a/technical/api-merge.html b/technical/api-merge.html index b2ddb05..d6f544e 100644 --- a/technical/api-merge.html +++ b/technical/api-merge.html 
@@ -801,7 +801,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/technical/api-parse-options.html b/technical/api-parse-options.html index f22b69f..71e44b7 100644 --- a/technical/api-parse-options.html +++ b/technical/api-parse-options.html 
@@ -1290,7 +1290,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-10 16:30:08 PDT  + 2020-08-11 08:30:08 JST   </div>   </div>   </body>  
diff --git a/technical/api-simple-ipc.html b/technical/api-simple-ipc.html index d999566..d1c9426 100644 --- a/technical/api-simple-ipc.html +++ b/technical/api-simple-ipc.html 
@@ -840,7 +840,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-02 15:10:10 PDT  + 2021-04-03 07:10:10 JST   </div>   </div>   </body>  
diff --git a/technical/api-trace2.html b/technical/api-trace2.html index f0be56a..5044b0c 100644 --- a/technical/api-trace2.html +++ b/technical/api-trace2.html 
@@ -1337,7 +1337,7 @@  </dt>   <dd>   <p>  - This event is emitted when one of the <code>error()</code>, <code>die()</code>,  + This event is emitted when one of the <code>BUG()</code>, <code>error()</code>, <code>die()</code>,   <code>warning()</code>, or <code>usage()</code> functions are called.   </p>   <div class="listingblock">  @@ -2156,7 +2156,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-12-08 16:10:07 PST  + 2021-04-30 15:03:30 JST   </div>   </div>   </body>  
diff --git a/technical/api-trace2.txt b/technical/api-trace2.txt index c65ffaf..3f52f98 100644 --- a/technical/api-trace2.txt +++ b/technical/api-trace2.txt 
@@ -465,7 +465,7 @@  ------------    `"error"`:: -	This event is emitted when one of the `error()`, `die()`, +	This event is emitted when one of the `BUG()`, `error()`, `die()`, 	`warning()`, or `usage()` functions are called.  +  ------------ 
diff --git a/technical/hash-function-transition.html b/technical/hash-function-transition.html index 0c3904b..2513d08 100644 --- a/technical/hash-function-transition.html +++ b/technical/hash-function-transition.html 
@@ -2087,7 +2087,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-22 16:54:23 PST  + 2021-02-23 09:54:23 JST   </div>   </div>   </body>  
diff --git a/technical/http-protocol.html b/technical/http-protocol.html index d3b848c..39d6e2d 100644 --- a/technical/http-protocol.html +++ b/technical/http-protocol.html 
@@ -1248,7 +1248,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-19 16:37:10 PDT  + 2020-08-20 08:37:10 JST   </div>   </div>   </body>  
diff --git a/technical/index-format.html b/technical/index-format.html index b5eab20..cc6c9db 100644 --- a/technical/index-format.html +++ b/technical/index-format.html 
@@ -820,6 +820,15 @@  </div></div>   <div class="literalblock">   <div class="content">  +<pre><code>An index entry typically represents a file. However, if sparse-checkout  +is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the  +`extensions.sparseIndex` extension is enabled, then the index may  +contain entries for directories outside of the sparse-checkout definition.  +These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and  +the path ends in a directory separator.</code></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">   <pre><code>32-bit ctime seconds, the last time a file's metadata changed   this is stat(2) data</code></pre>   </div></div>  @@ -1433,12 +1442,29 @@  </ul></div>   </div>   </div>  +<div class="sect1">  +<h2 id="_sparse_directory_entries">Sparse Directory Entries</h2>  +<div class="sectionbody">  +<div class="literalblock">  +<div class="content">  +<pre><code>When using sparse-checkout in cone mode, some entire directories within  +the index can be summarized by pointing to a tree object instead of the  +entire expanded list of paths within that tree. An index containing such  +entries is a "sparse index". Index format versions 4 and less were not  +implemented with such entries in mind. Thus, for these versions, an  +index containing sparse directory entries will include this extension  +with signature { 's', 'd', 'i', 'r' }. Like the split-index extension,  +tools should avoid interacting with a sparse index unless they understand  +this extension.</code></pre>  +</div></div>  +</div>  +</div>   </div>   <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-04-30 15:03:30 JST   </div>   </div>   </body>  
diff --git a/technical/index-format.txt b/technical/index-format.txt index d363a71..65da0da 100644 --- a/technical/index-format.txt +++ b/technical/index-format.txt 
@@ -44,6 +44,13 @@  localization, no special casing of directory separator '/'). Entries  with the same name are sorted by their stage field.   + An index entry typically represents a file. However, if sparse-checkout + is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the + `extensions.sparseIndex` extension is enabled, then the index may + contain entries for directories outside of the sparse-checkout definition. + These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and + the path ends in a directory separator. +  32-bit ctime seconds, the last time a file's metadata changed  this is stat(2) data   @@ -385,3 +392,15 @@ 	in this block of entries.    - 32-bit count of cache entries in this block + +== Sparse Directory Entries + + When using sparse-checkout in cone mode, some entire directories within + the index can be summarized by pointing to a tree object instead of the + entire expanded list of paths within that tree. An index containing such + entries is a "sparse index". Index format versions 4 and less were not + implemented with such entries in mind. Thus, for these versions, an + index containing sparse directory entries will include this extension + with signature { 's', 'd', 'i', 'r' }. Like the split-index extension, + tools should avoid interacting with a sparse index unless they understand + this extension. 
diff --git a/technical/long-running-process-protocol.html b/technical/long-running-process-protocol.html index 730362b..79d2b02 100644 --- a/technical/long-running-process-protocol.html +++ b/technical/long-running-process-protocol.html 
@@ -795,7 +795,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/technical/multi-pack-index.html b/technical/multi-pack-index.html index 4c337fb..e0220db 100644 --- a/technical/multi-pack-index.html +++ b/technical/multi-pack-index.html 
@@ -913,7 +913,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-08 14:45:29 PDT  + 2021-04-09 06:45:29 JST   </div>   </div>   </body>  
diff --git a/technical/pack-format.html b/technical/pack-format.html index b300242..c0f964a 100644 --- a/technical/pack-format.html +++ b/technical/pack-format.html 
@@ -1372,7 +1372,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-04-08 14:45:29 PDT  + 2021-04-09 06:45:29 JST   </div>   </div>   </body>  
diff --git a/technical/pack-heuristics.html b/technical/pack-heuristics.html index 3e6da3f..bd50aee 100644 --- a/technical/pack-heuristics.html +++ b/technical/pack-heuristics.html 
@@ -1343,7 +1343,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2014-01-13 15:35:15 PST  + 2014-01-14 08:35:15 JST   </div>   </div>   </body>  
diff --git a/technical/pack-protocol.html b/technical/pack-protocol.html index ff37433..4cb047d 100644 --- a/technical/pack-protocol.html +++ b/technical/pack-protocol.html 
@@ -1470,7 +1470,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-09-25 15:47:14 PDT  + 2020-09-26 07:47:14 JST   </div>   </div>   </body>  
diff --git a/technical/parallel-checkout.html b/technical/parallel-checkout.html new file mode 100644 index 0000000..c575bb4 --- /dev/null +++ b/technical/parallel-checkout.html 
@@ -0,0 +1,1082 @@ +<?xml version="1.0" encoding="UTF-8"?>  +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  +<head>  +<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />  +<meta name="generator" content="AsciiDoc 9.0.0rc2" />  +<title>Parallel Checkout Design Notes</title>  +<style type="text/css">  +/* Shared CSS for AsciiDoc xhtml11 and html5 backends */  +  +/* Default font. */  +body {  + font-family: Georgia,serif;  +}  +  +/* Title font. */  +h1, h2, h3, h4, h5, h6,  +div.title, caption.title,  +thead, p.table.header,  +#toctitle,  +#author, #revnumber, #revdate, #revremark,  +#footer {  + font-family: Arial,Helvetica,sans-serif;  +}  +  +body {  + margin: 1em 5% 1em 5%;  +}  +  +a {  + color: blue;  + text-decoration: underline;  +}  +a:visited {  + color: fuchsia;  +}  +  +em {  + font-style: italic;  + color: navy;  +}  +  +strong {  + font-weight: bold;  + color: #083194;  +}  +  +h1, h2, h3, h4, h5, h6 {  + color: #527bbd;  + margin-top: 1.2em;  + margin-bottom: 0.5em;  + line-height: 1.3;  +}  +  +h1, h2, h3 {  + border-bottom: 2px solid silver;  +}  +h2 {  + padding-top: 0.5em;  +}  +h3 {  + float: left;  +}  +h3 + * {  + clear: left;  +}  +h5 {  + font-size: 1.0em;  +}  +  +div.sectionbody {  + margin-left: 0;  +}  +  +hr {  + border: 1px solid silver;  +}  +  +p {  + margin-top: 0.5em;  + margin-bottom: 0.5em;  +}  +  +ul, ol, li > p {  + margin-top: 0;  +}  +ul > li { color: #aaa; }  +ul > li > * { color: black; }  +  +.monospaced, code, pre {  + font-family: "Courier New", Courier, monospace;  + font-size: inherit;  + color: navy;  + padding: 0;  + margin: 0;  +}  +pre {  + white-space: pre-wrap;  +}  +  +#author {  + color: #527bbd;  + font-weight: bold;  + font-size: 1.1em;  +}  +#email {  +}  +#revnumber, #revdate, #revremark {  +}  +  +#footer {  + font-size: small;  + border-top: 2px solid silver;  + padding-top: 0.5em;  + margin-top: 4.0em;  +}  +#footer-text {  + float: left;  + padding-bottom: 0.5em;  +}  +#footer-badges {  + float: right;  + padding-bottom: 0.5em;  +}  +  +#preamble {  + margin-top: 1.5em;  + margin-bottom: 1.5em;  +}  +div.imageblock, div.exampleblock, div.verseblock,  +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,  +div.admonitionblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +div.admonitionblock {  + margin-top: 2.0em;  + margin-bottom: 2.0em;  + margin-right: 10%;  + color: #606060;  +}  +  +div.content { /* Block element content. */  + padding: 0;  +}  +  +/* Block element titles. */  +div.title, caption.title {  + color: #527bbd;  + font-weight: bold;  + text-align: left;  + margin-top: 1.0em;  + margin-bottom: 0.5em;  +}  +div.title + * {  + margin-top: 0;  +}  +  +td div.title:first-child {  + margin-top: 0.0em;  +}  +div.content div.title:first-child {  + margin-top: 0.0em;  +}  +div.content + div.title {  + margin-top: 0.0em;  +}  +  +div.sidebarblock > div.content {  + background: #ffffee;  + border: 1px solid #dddddd;  + border-left: 4px solid #f0f0f0;  + padding: 0.5em;  +}  +  +div.listingblock > div.content {  + border: 1px solid #dddddd;  + border-left: 5px solid #f0f0f0;  + background: #f8f8f8;  + padding: 0.5em;  +}  +  +div.quoteblock, div.verseblock {  + padding-left: 1.0em;  + margin-left: 1.0em;  + margin-right: 10%;  + border-left: 5px solid #f0f0f0;  + color: #888;  +}  +  +div.quoteblock > div.attribution {  + padding-top: 0.5em;  + text-align: right;  +}  +  +div.verseblock > pre.content {  + font-family: inherit;  + font-size: inherit;  +}  +div.verseblock > div.attribution {  + padding-top: 0.75em;  + text-align: left;  +}  +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */  +div.verseblock + div.attribution {  + text-align: left;  +}  +  +div.admonitionblock .icon {  + vertical-align: top;  + font-size: 1.1em;  + font-weight: bold;  + text-decoration: underline;  + color: #527bbd;  + padding-right: 0.5em;  +}  +div.admonitionblock td.content {  + padding-left: 0.5em;  + border-left: 3px solid #dddddd;  +}  +  +div.exampleblock > div.content {  + border-left: 3px solid #dddddd;  + padding-left: 0.5em;  +}  +  +div.imageblock div.content { padding-left: 0; }  +span.image img { border-style: none; vertical-align: text-bottom; }  +a.image:visited { color: white; }  +  +dl {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +dt {  + margin-top: 0.5em;  + margin-bottom: 0;  + font-style: normal;  + color: navy;  +}  +dd > *:first-child {  + margin-top: 0.1em;  +}  +  +ul, ol {  + list-style-position: outside;  +}  +ol.arabic {  + list-style-type: decimal;  +}  +ol.loweralpha {  + list-style-type: lower-alpha;  +}  +ol.upperalpha {  + list-style-type: upper-alpha;  +}  +ol.lowerroman {  + list-style-type: lower-roman;  +}  +ol.upperroman {  + list-style-type: upper-roman;  +}  +  +div.compact ul, div.compact ol,  +div.compact p, div.compact p,  +div.compact div, div.compact div {  + margin-top: 0.1em;  + margin-bottom: 0.1em;  +}  +  +tfoot {  + font-weight: bold;  +}  +td > div.verse {  + white-space: pre;  +}  +  +div.hdlist {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +div.hdlist tr {  + padding-bottom: 15px;  +}  +dt.hdlist1.strong, td.hdlist1.strong {  + font-weight: bold;  +}  +td.hdlist1 {  + vertical-align: top;  + font-style: normal;  + padding-right: 0.8em;  + color: navy;  +}  +td.hdlist2 {  + vertical-align: top;  +}  +div.hdlist.compact tr {  + margin: 0;  + padding-bottom: 0;  +}  +  +.comment {  + background: yellow;  +}  +  +.footnote, .footnoteref {  + font-size: 0.8em;  +}  +  +span.footnote, span.footnoteref {  + vertical-align: super;  +}  +  +#footnotes {  + margin: 20px 0 20px 0;  + padding: 7px 0 0 0;  +}  +  +#footnotes div.footnote {  + margin: 0 0 5px 0;  +}  +  +#footnotes hr {  + border: none;  + border-top: 1px solid silver;  + height: 1px;  + text-align: left;  + margin-left: 0;  + width: 20%;  + min-width: 100px;  +}  +  +div.colist td {  + padding-right: 0.5em;  + padding-bottom: 0.3em;  + vertical-align: top;  +}  +div.colist td img {  + margin-top: 0.3em;  +}  +  +@media print {  + #footer-badges { display: none; }  +}  +  +#toc {  + margin-bottom: 2.5em;  +}  +  +#toctitle {  + color: #527bbd;  + font-size: 1.1em;  + font-weight: bold;  + margin-top: 1.0em;  + margin-bottom: 0.1em;  +}  +  +div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {  + margin-top: 0;  + margin-bottom: 0;  +}  +div.toclevel2 {  + margin-left: 2em;  + font-size: 0.9em;  +}  +div.toclevel3 {  + margin-left: 4em;  + font-size: 0.9em;  +}  +div.toclevel4 {  + margin-left: 6em;  + font-size: 0.9em;  +}  +  +span.aqua { color: aqua; }  +span.black { color: black; }  +span.blue { color: blue; }  +span.fuchsia { color: fuchsia; }  +span.gray { color: gray; }  +span.green { color: green; }  +span.lime { color: lime; }  +span.maroon { color: maroon; }  +span.navy { color: navy; }  +span.olive { color: olive; }  +span.purple { color: purple; }  +span.red { color: red; }  +span.silver { color: silver; }  +span.teal { color: teal; }  +span.white { color: white; }  +span.yellow { color: yellow; }  +  +span.aqua-background { background: aqua; }  +span.black-background { background: black; }  +span.blue-background { background: blue; }  +span.fuchsia-background { background: fuchsia; }  +span.gray-background { background: gray; }  +span.green-background { background: green; }  +span.lime-background { background: lime; }  +span.maroon-background { background: maroon; }  +span.navy-background { background: navy; }  +span.olive-background { background: olive; }  +span.purple-background { background: purple; }  +span.red-background { background: red; }  +span.silver-background { background: silver; }  +span.teal-background { background: teal; }  +span.white-background { background: white; }  +span.yellow-background { background: yellow; }  +  +span.big { font-size: 2em; }  +span.small { font-size: 0.6em; }  +  +span.underline { text-decoration: underline; }  +span.overline { text-decoration: overline; }  +span.line-through { text-decoration: line-through; }  +  +div.unbreakable { page-break-inside: avoid; }  +  +  +/*  + * xhtml11 specific  + *  + * */  +  +div.tableblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +div.tableblock > table {  + border: 3px solid #527bbd;  +}  +thead, p.table.header {  + font-weight: bold;  + color: #527bbd;  +}  +p.table {  + margin-top: 0;  +}  +/* Because the table frame attribute is overridden by CSS in most browsers. */  +div.tableblock > table[frame="void"] {  + border-style: none;  +}  +div.tableblock > table[frame="hsides"] {  + border-left-style: none;  + border-right-style: none;  +}  +div.tableblock > table[frame="vsides"] {  + border-top-style: none;  + border-bottom-style: none;  +}  +  +  +/*  + * html5 specific  + *  + * */  +  +table.tableblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +thead, p.tableblock.header {  + font-weight: bold;  + color: #527bbd;  +}  +p.tableblock {  + margin-top: 0;  +}  +table.tableblock {  + border-width: 3px;  + border-spacing: 0px;  + border-style: solid;  + border-color: #527bbd;  + border-collapse: collapse;  +}  +th.tableblock, td.tableblock {  + border-width: 1px;  + padding: 4px;  + border-style: solid;  + border-color: #527bbd;  +}  +  +table.tableblock.frame-topbot {  + border-left-style: hidden;  + border-right-style: hidden;  +}  +table.tableblock.frame-sides {  + border-top-style: hidden;  + border-bottom-style: hidden;  +}  +table.tableblock.frame-none {  + border-style: hidden;  +}  +  +th.tableblock.halign-left, td.tableblock.halign-left {  + text-align: left;  +}  +th.tableblock.halign-center, td.tableblock.halign-center {  + text-align: center;  +}  +th.tableblock.halign-right, td.tableblock.halign-right {  + text-align: right;  +}  +  +th.tableblock.valign-top, td.tableblock.valign-top {  + vertical-align: top;  +}  +th.tableblock.valign-middle, td.tableblock.valign-middle {  + vertical-align: middle;  +}  +th.tableblock.valign-bottom, td.tableblock.valign-bottom {  + vertical-align: bottom;  +}  +  +  +/*  + * manpage specific  + *  + * */  +  +body.manpage h1 {  + padding-top: 0.5em;  + padding-bottom: 0.5em;  + border-top: 2px solid silver;  + border-bottom: 2px solid silver;  +}  +body.manpage h2 {  + border-style: none;  +}  +body.manpage div.sectionbody {  + margin-left: 3em;  +}  +  +@media print {  + body.manpage div#toc { display: none; }  +}  +  +  +</style>  +<script type="text/javascript">  +/*<![CDATA[*/  +var asciidoc = { // Namespace.  +  +/////////////////////////////////////////////////////////////////////  +// Table Of Contents generator  +/////////////////////////////////////////////////////////////////////  +  +/* Author: Mihai Bazon, September 2002  + * http://students.infoiasi.ro/~mishoo  + *  + * Table Of Content generator  + * Version: 0.4  + *  + * Feel free to use this script under the terms of the GNU General Public  + * License, as long as you do not remove or alter this notice.  + */  +  + /* modified by Troy D. Hanson, September 2006. License: GPL */  + /* modified by Stuart Rackham, 2006, 2009. License: GPL */  +  +// toclevels = 1..4.  +toc: function (toclevels) {  +  + function getText(el) {  + var text = "";  + for (var i = el.firstChild; i != null; i = i.nextSibling) {  + if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.  + text += i.data;  + else if (i.firstChild != null)  + text += getText(i);  + }  + return text;  + }  +  + function TocEntry(el, text, toclevel) {  + this.element = el;  + this.text = text;  + this.toclevel = toclevel;  + }  +  + function tocEntries(el, toclevels) {  + var result = new Array;  + var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');  + // Function that scans the DOM tree for header elements (the DOM2  + // nodeIterator API would be a better technique but not supported by all  + // browsers).  + var iterate = function (el) {  + for (var i = el.firstChild; i != null; i = i.nextSibling) {  + if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {  + var mo = re.exec(i.tagName);  + if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {  + result[result.length] = new TocEntry(i, getText(i), mo[1]-1);  + }  + iterate(i);  + }  + }  + }  + iterate(el);  + return result;  + }  +  + var toc = document.getElementById("toc");  + if (!toc) {  + return;  + }  +  + // Delete existing TOC entries in case we're reloading the TOC.  + var tocEntriesToRemove = [];  + var i;  + for (i = 0; i < toc.childNodes.length; i++) {  + var entry = toc.childNodes[i];  + if (entry.nodeName.toLowerCase() == 'div'  + && entry.getAttribute("class")  + && entry.getAttribute("class").match(/^toclevel/))  + tocEntriesToRemove.push(entry);  + }  + for (i = 0; i < tocEntriesToRemove.length; i++) {  + toc.removeChild(tocEntriesToRemove[i]);  + }  +  + // Rebuild TOC entries.  + var entries = tocEntries(document.getElementById("content"), toclevels);  + for (var i = 0; i < entries.length; ++i) {  + var entry = entries[i];  + if (entry.element.id == "")  + entry.element.id = "_toc_" + i;  + var a = document.createElement("a");  + a.href = "#" + entry.element.id;  + a.appendChild(document.createTextNode(entry.text));  + var div = document.createElement("div");  + div.appendChild(a);  + div.className = "toclevel" + entry.toclevel;  + toc.appendChild(div);  + }  + if (entries.length == 0)  + toc.parentNode.removeChild(toc);  +},  +  +  +/////////////////////////////////////////////////////////////////////  +// Footnotes generator  +/////////////////////////////////////////////////////////////////////  +  +/* Based on footnote generation code from:  + * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html  + */  +  +footnotes: function () {  + // Delete existing footnote entries in case we're reloading the footnodes.  + var i;  + var noteholder = document.getElementById("footnotes");  + if (!noteholder) {  + return;  + }  + var entriesToRemove = [];  + for (i = 0; i < noteholder.childNodes.length; i++) {  + var entry = noteholder.childNodes[i];  + if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")  + entriesToRemove.push(entry);  + }  + for (i = 0; i < entriesToRemove.length; i++) {  + noteholder.removeChild(entriesToRemove[i]);  + }  +  + // Rebuild footnote entries.  + var cont = document.getElementById("content");  + var spans = cont.getElementsByTagName("span");  + var refs = {};  + var n = 0;  + for (i=0; i<spans.length; i++) {  + if (spans[i].className == "footnote") {  + n++;  + var note = spans[i].getAttribute("data-note");  + if (!note) {  + // Use [\s\S] in place of . so multi-line matches work.  + // Because JavaScript has no s (dotall) regex flag.  + note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];  + spans[i].innerHTML =  + "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +  + "' title='View footnote' class='footnote'>" + n + "</a>]";  + spans[i].setAttribute("data-note", note);  + }  + noteholder.innerHTML +=  + "<div class='footnote' id='_footnote_" + n + "'>" +  + "<a href='#_footnoteref_" + n + "' title='Return to text'>" +  + n + "</a>. " + note + "</div>";  + var id =spans[i].getAttribute("id");  + if (id != null) refs["#"+id] = n;  + }  + }  + if (n == 0)  + noteholder.parentNode.removeChild(noteholder);  + else {  + // Process footnoterefs.  + for (i=0; i<spans.length; i++) {  + if (spans[i].className == "footnoteref") {  + var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");  + href = href.match(/#.*/)[0]; // Because IE return full URL.  + n = refs[href];  + spans[i].innerHTML =  + "[<a href='#_footnote_" + n +  + "' title='View footnote' class='footnote'>" + n + "</a>]";  + }  + }  + }  +},  +  +install: function(toclevels) {  + var timerId;  +  + function reinstall() {  + asciidoc.footnotes();  + if (toclevels) {  + asciidoc.toc(toclevels);  + }  + }  +  + function reinstallAndRemoveTimer() {  + clearInterval(timerId);  + reinstall();  + }  +  + timerId = setInterval(reinstall, 500);  + if (document.addEventListener)  + document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);  + else  + window.onload = reinstallAndRemoveTimer;  +}  +  +}  +asciidoc.install();  +/*]]>*/  +</script>  +</head>  +<body class="article">  +<div id="header">  +<h1>Parallel Checkout Design Notes</h1>  +</div>  +<div id="content">  +<div id="preamble">  +<div class="sectionbody">  +<div class="paragraph"><p>The "Parallel Checkout" feature attempts to use multiple processes to  +parallelize the work of uncompressing the blobs, applying in-core  +filters, and writing the resulting contents to the working tree during a  +checkout operation. It can be used by all checkout-related commands,  +such as <code>clone</code>, <code>checkout</code>, <code>reset</code>, <code>sparse-checkout</code>, and others.</p></div>  +<div class="paragraph"><p>These commands share the following basic structure:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +Step 1: Read the current index file into memory.  +</p>  +</li>  +<li>  +<p>  +Step 2: Modify the in-memory index based upon the command, and  + temporarily mark all cache entries that need to be updated.  +</p>  +</li>  +<li>  +<p>  +Step 3: Populate the working tree to match the new candidate index.  + This includes iterating over all of the to-be-updated cache entries  + and delete, create, or overwrite the associated files in the working  + tree.  +</p>  +</li>  +<li>  +<p>  +Step 4: Write the new index to disk.  +</p>  +</li>  +</ul></div>  +<div class="paragraph"><p>Step 3 is the focus of the "parallel checkout" effort described here.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_sequential_implementation">Sequential Implementation</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>For the purposes of discussion here, the current sequential  +implementation of Step 3 is divided in 3 parts, each one implemented in  +its own function:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +Step 3a: <code>unpack-trees.c:check_updates()</code> contains a series of  + sequential loops iterating over the <code>cache_entry</code>'s array. The main  + loop in this function calls the Step 3b function for each of the  + to-be-updated entries.  +</p>  +</li>  +<li>  +<p>  +Step 3b: <code>entry.c:checkout_entry()</code> examines the existing working tree  + for file conflicts, collisions, and unsaved changes. It removes files  + and creates leading directories as necessary. It calls the Step 3c  + function for each entry to be written.  +</p>  +</li>  +<li>  +<p>  +Step 3c: <code>entry.c:write_entry()</code> loads the blob into memory, smudges  + it if necessary, creates the file in the working tree, writes the  + smudged contents, calls <code>fstat()</code> or <code>lstat()</code>, and updates the  + associated <code>cache_entry</code> struct with the stat information gathered.  +</p>  +</li>  +</ul></div>  +<div class="paragraph"><p>It wouldn&#8217;t be safe to perform Step 3b in parallel, as there could be  +race conditions between file creations and removals. Instead, the  +parallel checkout framework lets the sequential code handle Step 3b,  +and uses parallel workers to replace the sequential  +<code>entry.c:write_entry()</code> calls from Step 3c.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_rejected_multi_threaded_solution">Rejected Multi-Threaded Solution</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>The most "straightforward" implementation would be to spread the set of  +to-be-updated cache entries across multiple threads. But due to the  +thread-unsafe functions in the ODB code, we would have to use locks to  +coordinate the parallel operation. An early prototype of this solution  +showed that the multi-threaded checkout would bring performance  +improvements over the sequential code, but there was still too much lock  +contention. A <code>perf</code> profiling indicated that around 20% of the runtime  +during a local Linux clone (on an SSD) was spent in locking functions.  +For this reason this approach was rejected in favor of using multiple  +child processes, which led to a better performance.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_multi_process_solution">Multi-Process Solution</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>Parallel checkout alters the aforementioned Step 3 to use multiple  +<code>checkout--worker</code> background processes to distribute the work. The  +long-running worker processes are controlled by the foreground Git  +command using the existing run-command API.</p></div>  +<div class="sect2">  +<h3 id="_overview">Overview</h3>  +<div class="paragraph"><p>Step 3b is only slightly altered; for each entry to be checked out, the  +main process performs the following steps:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +M1: Check whether there is any untracked or unclean file in the  + working tree which would be overwritten by this entry, and decide  + whether to proceed (removing the file(s)) or not.  +</p>  +</li>  +<li>  +<p>  +M2: Create the leading directories.  +</p>  +</li>  +<li>  +<p>  +M3: Load the conversion attributes for the entry&#8217;s path.  +</p>  +</li>  +<li>  +<p>  +M4: Check, based on the entry&#8217;s type and conversion attributes,  + whether the entry is eligible for parallel checkout (more on this  + later). If it is eligible, enqueue the entry and the loaded  + attributes to later write the entry in parallel. If not, write the  + entry right away, using the default sequential code.  +</p>  +</li>  +</ul></div>  +<div class="paragraph"><p>Note: we save the conversion attributes associated with each entry  +because the workers don&#8217;t have access to the main process' index state,  +so they can&#8217;t load the attributes by themselves (and the attributes are  +needed to properly smudge the entry). Additionally, this has a positive  +impact on performance as (1) we don&#8217;t need to load the attributes twice  +and (2) the attributes machinery is optimized to handle paths in  +sequential order.</p></div>  +<div class="paragraph"><p>After all entries have passed through the above steps, the main process  +checks if the number of enqueued entries is sufficient to spread among  +the workers. If not, it just writes them sequentially. Otherwise, it  +spawns the workers and distributes the queued entries uniformly in  +continuous chunks. This aims to minimize the chances of two workers  +writing to the same directory simultaneously, which could increase lock  +contention in the kernel.</p></div>  +<div class="paragraph"><p>Then, for each assigned item, each worker:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +W1: Checks if there is any non-directory file in the leading part of  + the entry&#8217;s path or if there already exists a file at the entry' path.  + If so, mark the entry with <code>PC_ITEM_COLLIDED</code> and skip it (more on  + this later).  +</p>  +</li>  +<li>  +<p>  +W2: Creates the file (with O_CREAT and O_EXCL).  +</p>  +</li>  +<li>  +<p>  +W3: Loads the blob into memory (inflating and delta reconstructing  + it).  +</p>  +</li>  +<li>  +<p>  +W4: Applies any required in-process filter, like end-of-line  + conversion and re-encoding.  +</p>  +</li>  +<li>  +<p>  +W5: Writes the result to the file descriptor opened at W2.  +</p>  +</li>  +<li>  +<p>  +W6: Calls <code>fstat()</code> or lstat()` on the just-written path, and sends  + the result back to the main process, together with the end status of  + the operation and the item&#8217;s identification number.  +</p>  +</li>  +</ul></div>  +<div class="paragraph"><p>Note that, when possible, steps W3 to W5 are delegated to the streaming  +machinery, removing the need to keep the entire blob in memory.</p></div>  +<div class="paragraph"><p>If the worker fails to read the blob or to write it to the working tree,  +it removes the created file to avoid leaving empty files behind. This is  +the <strong>only</strong> time a worker is allowed to remove a file.</p></div>  +<div class="paragraph"><p>As mentioned earlier, it is the responsibility of the main process to  +remove any file that blocks the checkout operation (or abort if the  +removal(s) would cause data loss and the user didn&#8217;t ask to <code>--force</code>).  +This is crucial to avoid race conditions and also to properly detect  +path collisions at Step W1.</p></div>  +<div class="paragraph"><p>After the workers finish writing the items and sending back the required  +information, the main process handles the results in two steps:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +First, it updates the in-memory index with the <code>lstat()</code> information  + sent by the workers. (This must be done first as this information  + might me required in the following step.)  +</p>  +</li>  +<li>  +<p>  +Then it writes the items which collided on disk (i.e. items marked  + with <code>PC_ITEM_COLLIDED</code>). More on this below.  +</p>  +</li>  +</ul></div>  +</div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_path_collisions">Path Collisions</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>Path collisions happen when two different paths correspond to the same  +entry in the file system. E.g. the paths <em>a</em> and <em>A</em> would collide in a  +case-insensitive file system.</p></div>  +<div class="paragraph"><p>The sequential checkout deals with collisions in the same way that it  +deals with files that were already present in the working tree before  +checkout. Basically, it checks if the path that it wants to write  +already exists on disk, makes sure the existing file doesn&#8217;t have  +unsaved data, and then overwrites it. (To be more pedantic: it deletes  +the existing file and creates the new one.) So, if there are multiple  +colliding files to be checked out, the sequential code will write each  +one of them but only the last will actually survive on disk.</p></div>  +<div class="paragraph"><p>Parallel checkout aims to reproduce the same behavior. However, we  +cannot let the workers racily write to the same file on disk. Instead,  +the workers detect when the entry that they want to check out would  +collide with an existing file, and mark it with <code>PC_ITEM_COLLIDED</code>.  +Later, the main process can sequentially feed these entries back to  +<code>checkout_entry()</code> without the risk of race conditions. On clone, this  +also has the effect of marking the colliding entries to later emit a  +warning for the user, like the classic sequential checkout does.</p></div>  +<div class="paragraph"><p>The workers are able to detect both collisions among the entries being  +concurrently written and collisions between a parallel-eligible entry  +and an ineligible entry. The general idea for collision detection is  +quite straightforward: for each parallel-eligible entry, the main  +process must remove all files that prevent this entry from being written  +(before enqueueing it). This includes any non-directory file in the  +leading path of the entry. Later, when a worker gets assigned the entry,  +it looks again for the non-directories files and for an already existing  +file at the entry&#8217;s path. If any of these checks finds something, the  +worker knows that there was a path collision.</p></div>  +<div class="paragraph"><p>Because parallel checkout can distinguish path collisions from the case  +where the file was already present in the working tree before checkout,  +we could alternatively choose to skip the checkout of colliding entries.  +However, each entry that doesn&#8217;t get written would have NULL <code>lstat()</code>  +fields on the index. This could cause performance penalties for  +subsequent commands that need to refresh the index, as they would have  +to go to the file system to see if the entry is dirty. Thus, if we have  +N entries in a colliding group and we decide to write and <code>lstat()</code> only  +one of them, every subsequent <code>git-status</code> will have to read, convert,  +and hash the written file N - 1 times. By checking out all colliding  +entries (like the sequential code does), we only pay the overhead once,  +during checkout.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_eligible_entries_for_parallel_checkout">Eligible Entries for Parallel Checkout</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>As previously mentioned, not all entries passed to <code>checkout_entry()</code>  +will be considered eligible for parallel checkout. More specifically, we  +exclude:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +Symbolic links; to avoid race conditions that, in combination with  + path collisions, could cause workers to write files at the wrong  + place. For example, if we were to concurrently check out a symlink  + <em>a</em> &#8594; <em>b</em> and a regular file <em>A/f</em> in a case-insensitive file system,  + we could potentially end up writing the file <em>A/f</em> at <em>a/f</em>, due to a  + race condition.  +</p>  +</li>  +<li>  +<p>  +Regular files that require external filters (either "one shot" filters  + or long-running process filters). These filters are black-boxes to Git  + and may have their own internal locking or non-concurrent assumptions.  + So it might not be safe to run multiple instances in parallel.  +</p>  +<div class="paragraph"><p>Besides, long-running filters may use the delayed checkout feature to  +postpone the return of some filtered blobs. The delayed checkout queue  +and the parallel checkout queue are not compatible and should remain  +separate.</p></div>  +<div class="paragraph"><p>Note: regular files that only require internal filters, like end-of-line  +conversion and re-encoding, are eligible for parallel checkout.</p></div>  +</li>  +</ul></div>  +<div class="paragraph"><p>Ineligible entries are checked out by the classic sequential codepath  +<strong>before</strong> spawning workers.</p></div>  +<div class="paragraph"><p>Note: submodules&#8217;s files are also eligible for parallel checkout (as  +long as they don&#8217;t fall into any of the excluding categories mentioned  +above). But since each submodule is checked out in its own child  +process, we don&#8217;t mix the superproject&#8217;s and the submodules' files in  +the same parallel checkout process or queue.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_the_api">The API</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>The parallel checkout API was designed with the goal of minimizing  +changes to the current users of the checkout machinery. This means that  +they don&#8217;t have to call a different function for sequential or parallel  +checkout. As already mentioned, <code>checkout_entry()</code> will automatically  +insert the given entry in the parallel checkout queue when this feature  +is enabled and the entry is eligible; otherwise, it will just write the  +entry right away, using the sequential code. In general, callers of the  +parallel checkout API should look similar to this:</p></div>  +<div class="listingblock">  +<div class="content">  +<pre><code>int pc_workers, pc_threshold, err = 0;  +struct checkout state;  +  +get_parallel_checkout_configs(&amp;pc_workers, &amp;pc_threshold);  +  +/*  + * This check is not strictly required, but it  + * should save some time in sequential mode.  + */  +if (pc_workers &gt; 1)  + init_parallel_checkout();  +  +for (each cache_entry ce to-be-updated)  + err |= checkout_entry(ce, &amp;state, NULL, NULL);  +  +err |= run_parallel_checkout(&amp;state, pc_workers, pc_threshold, NULL, NULL);</code></pre>  +</div></div>  +</div>  +</div>  +</div>  +<div id="footnotes"><hr /></div>  +<div id="footer">  +<div id="footer-text">  +Last updated  + 2021-04-30 15:03:30 JST  +</div>  +</div>  +</body>  +</html>  
diff --git a/technical/parallel-checkout.txt b/technical/parallel-checkout.txt new file mode 100644 index 0000000..e790258 --- /dev/null +++ b/technical/parallel-checkout.txt 
@@ -0,0 +1,270 @@ +Parallel Checkout Design Notes +============================== + +The "Parallel Checkout" feature attempts to use multiple processes to +parallelize the work of uncompressing the blobs, applying in-core +filters, and writing the resulting contents to the working tree during a +checkout operation. It can be used by all checkout-related commands, +such as `clone`, `checkout`, `reset`, `sparse-checkout`, and others. + +These commands share the following basic structure: + +* Step 1: Read the current index file into memory. + +* Step 2: Modify the in-memory index based upon the command, and + temporarily mark all cache entries that need to be updated. + +* Step 3: Populate the working tree to match the new candidate index. + This includes iterating over all of the to-be-updated cache entries + and delete, create, or overwrite the associated files in the working + tree. + +* Step 4: Write the new index to disk. + +Step 3 is the focus of the "parallel checkout" effort described here. + +Sequential Implementation +------------------------- + +For the purposes of discussion here, the current sequential +implementation of Step 3 is divided in 3 parts, each one implemented in +its own function: + +* Step 3a: `unpack-trees.c:check_updates()` contains a series of + sequential loops iterating over the `cache_entry`'s array. The main + loop in this function calls the Step 3b function for each of the + to-be-updated entries. + +* Step 3b: `entry.c:checkout_entry()` examines the existing working tree + for file conflicts, collisions, and unsaved changes. It removes files + and creates leading directories as necessary. It calls the Step 3c + function for each entry to be written. + +* Step 3c: `entry.c:write_entry()` loads the blob into memory, smudges + it if necessary, creates the file in the working tree, writes the + smudged contents, calls `fstat()` or `lstat()`, and updates the + associated `cache_entry` struct with the stat information gathered. + +It wouldn't be safe to perform Step 3b in parallel, as there could be +race conditions between file creations and removals. Instead, the +parallel checkout framework lets the sequential code handle Step 3b, +and uses parallel workers to replace the sequential +`entry.c:write_entry()` calls from Step 3c. + +Rejected Multi-Threaded Solution +-------------------------------- + +The most "straightforward" implementation would be to spread the set of +to-be-updated cache entries across multiple threads. But due to the +thread-unsafe functions in the ODB code, we would have to use locks to +coordinate the parallel operation. An early prototype of this solution +showed that the multi-threaded checkout would bring performance +improvements over the sequential code, but there was still too much lock +contention. A `perf` profiling indicated that around 20% of the runtime +during a local Linux clone (on an SSD) was spent in locking functions. +For this reason this approach was rejected in favor of using multiple +child processes, which led to a better performance. + +Multi-Process Solution +---------------------- + +Parallel checkout alters the aforementioned Step 3 to use multiple +`checkout--worker` background processes to distribute the work. The +long-running worker processes are controlled by the foreground Git +command using the existing run-command API. + +Overview +~~~~~~~~ + +Step 3b is only slightly altered; for each entry to be checked out, the +main process performs the following steps: + +* M1: Check whether there is any untracked or unclean file in the + working tree which would be overwritten by this entry, and decide + whether to proceed (removing the file(s)) or not. + +* M2: Create the leading directories. + +* M3: Load the conversion attributes for the entry's path. + +* M4: Check, based on the entry's type and conversion attributes, + whether the entry is eligible for parallel checkout (more on this + later). If it is eligible, enqueue the entry and the loaded + attributes to later write the entry in parallel. If not, write the + entry right away, using the default sequential code. + +Note: we save the conversion attributes associated with each entry +because the workers don't have access to the main process' index state, +so they can't load the attributes by themselves (and the attributes are +needed to properly smudge the entry). Additionally, this has a positive +impact on performance as (1) we don't need to load the attributes twice +and (2) the attributes machinery is optimized to handle paths in +sequential order. + +After all entries have passed through the above steps, the main process +checks if the number of enqueued entries is sufficient to spread among +the workers. If not, it just writes them sequentially. Otherwise, it +spawns the workers and distributes the queued entries uniformly in +continuous chunks. This aims to minimize the chances of two workers +writing to the same directory simultaneously, which could increase lock +contention in the kernel. + +Then, for each assigned item, each worker: + +* W1: Checks if there is any non-directory file in the leading part of + the entry's path or if there already exists a file at the entry' path. + If so, mark the entry with `PC_ITEM_COLLIDED` and skip it (more on + this later). + +* W2: Creates the file (with O_CREAT and O_EXCL). + +* W3: Loads the blob into memory (inflating and delta reconstructing + it). + +* W4: Applies any required in-process filter, like end-of-line + conversion and re-encoding. + +* W5: Writes the result to the file descriptor opened at W2. + +* W6: Calls `fstat()` or lstat()` on the just-written path, and sends + the result back to the main process, together with the end status of + the operation and the item's identification number. + +Note that, when possible, steps W3 to W5 are delegated to the streaming +machinery, removing the need to keep the entire blob in memory. + +If the worker fails to read the blob or to write it to the working tree, +it removes the created file to avoid leaving empty files behind. This is +the *only* time a worker is allowed to remove a file. + +As mentioned earlier, it is the responsibility of the main process to +remove any file that blocks the checkout operation (or abort if the +removal(s) would cause data loss and the user didn't ask to `--force`). +This is crucial to avoid race conditions and also to properly detect +path collisions at Step W1. + +After the workers finish writing the items and sending back the required +information, the main process handles the results in two steps: + +- First, it updates the in-memory index with the `lstat()` information + sent by the workers. (This must be done first as this information + might me required in the following step.) + +- Then it writes the items which collided on disk (i.e. items marked + with `PC_ITEM_COLLIDED`). More on this below. + +Path Collisions +--------------- + +Path collisions happen when two different paths correspond to the same +entry in the file system. E.g. the paths 'a' and 'A' would collide in a +case-insensitive file system. + +The sequential checkout deals with collisions in the same way that it +deals with files that were already present in the working tree before +checkout. Basically, it checks if the path that it wants to write +already exists on disk, makes sure the existing file doesn't have +unsaved data, and then overwrites it. (To be more pedantic: it deletes +the existing file and creates the new one.) So, if there are multiple +colliding files to be checked out, the sequential code will write each +one of them but only the last will actually survive on disk. + +Parallel checkout aims to reproduce the same behavior. However, we +cannot let the workers racily write to the same file on disk. Instead, +the workers detect when the entry that they want to check out would +collide with an existing file, and mark it with `PC_ITEM_COLLIDED`. +Later, the main process can sequentially feed these entries back to +`checkout_entry()` without the risk of race conditions. On clone, this +also has the effect of marking the colliding entries to later emit a +warning for the user, like the classic sequential checkout does. + +The workers are able to detect both collisions among the entries being +concurrently written and collisions between a parallel-eligible entry +and an ineligible entry. The general idea for collision detection is +quite straightforward: for each parallel-eligible entry, the main +process must remove all files that prevent this entry from being written +(before enqueueing it). This includes any non-directory file in the +leading path of the entry. Later, when a worker gets assigned the entry, +it looks again for the non-directories files and for an already existing +file at the entry's path. If any of these checks finds something, the +worker knows that there was a path collision. + +Because parallel checkout can distinguish path collisions from the case +where the file was already present in the working tree before checkout, +we could alternatively choose to skip the checkout of colliding entries. +However, each entry that doesn't get written would have NULL `lstat()` +fields on the index. This could cause performance penalties for +subsequent commands that need to refresh the index, as they would have +to go to the file system to see if the entry is dirty. Thus, if we have +N entries in a colliding group and we decide to write and `lstat()` only +one of them, every subsequent `git-status` will have to read, convert, +and hash the written file N - 1 times. By checking out all colliding +entries (like the sequential code does), we only pay the overhead once, +during checkout. + +Eligible Entries for Parallel Checkout +-------------------------------------- + +As previously mentioned, not all entries passed to `checkout_entry()` +will be considered eligible for parallel checkout. More specifically, we +exclude: + +- Symbolic links; to avoid race conditions that, in combination with + path collisions, could cause workers to write files at the wrong + place. For example, if we were to concurrently check out a symlink + 'a' -> 'b' and a regular file 'A/f' in a case-insensitive file system, + we could potentially end up writing the file 'A/f' at 'a/f', due to a + race condition. + +- Regular files that require external filters (either "one shot" filters + or long-running process filters). These filters are black-boxes to Git + and may have their own internal locking or non-concurrent assumptions. + So it might not be safe to run multiple instances in parallel. ++ +Besides, long-running filters may use the delayed checkout feature to +postpone the return of some filtered blobs. The delayed checkout queue +and the parallel checkout queue are not compatible and should remain +separate. ++ +Note: regular files that only require internal filters, like end-of-line +conversion and re-encoding, are eligible for parallel checkout. + +Ineligible entries are checked out by the classic sequential codepath +*before* spawning workers. + +Note: submodules's files are also eligible for parallel checkout (as +long as they don't fall into any of the excluding categories mentioned +above). But since each submodule is checked out in its own child +process, we don't mix the superproject's and the submodules' files in +the same parallel checkout process or queue. + +The API +------- + +The parallel checkout API was designed with the goal of minimizing +changes to the current users of the checkout machinery. This means that +they don't have to call a different function for sequential or parallel +checkout. As already mentioned, `checkout_entry()` will automatically +insert the given entry in the parallel checkout queue when this feature +is enabled and the entry is eligible; otherwise, it will just write the +entry right away, using the sequential code. In general, callers of the +parallel checkout API should look similar to this: + +---------------------------------------------- +int pc_workers, pc_threshold, err = 0; +struct checkout state; + +get_parallel_checkout_configs(&pc_workers, &pc_threshold); + +/* + * This check is not strictly required, but it + * should save some time in sequential mode. + */ +if (pc_workers > 1) +	init_parallel_checkout(); + +for (each cache_entry ce to-be-updated) +	err |= checkout_entry(ce, &state, NULL, NULL); + +err |= run_parallel_checkout(&state, pc_workers, pc_threshold, NULL, NULL); +---------------------------------------------- 
diff --git a/technical/partial-clone.html b/technical/partial-clone.html index 2010eaa..e73d17e 100644 --- a/technical/partial-clone.html +++ b/technical/partial-clone.html 
@@ -1213,7 +1213,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-09-03 13:19:53 PDT  + 2020-09-04 05:19:53 JST   </div>   </div>   </body>  
diff --git a/technical/protocol-capabilities.html b/technical/protocol-capabilities.html index 19fe6aa..e6535c4 100644 --- a/technical/protocol-capabilities.html +++ b/technical/protocol-capabilities.html 
@@ -1130,7 +1130,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-12-08 16:10:07 PST  + 2020-12-09 09:10:07 JST   </div>   </div>   </body>  
diff --git a/technical/protocol-common.html b/technical/protocol-common.html index cec9937..8b44955 100644 --- a/technical/protocol-common.html +++ b/technical/protocol-common.html 
@@ -859,7 +859,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-08-31 14:16:00 PDT  + 2016-09-01 06:16:00 JST   </div>   </div>   </body>  
diff --git a/technical/protocol-v2.html b/technical/protocol-v2.html index 72b553c..70a0a21 100644 --- a/technical/protocol-v2.html +++ b/technical/protocol-v2.html 
@@ -1412,7 +1412,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-02-25 17:29:29 PST  + 2021-02-26 10:29:29 JST   </div>   </div>   </body>  
diff --git a/technical/racy-git.html b/technical/racy-git.html index 0e87054..3b494fb 100644 --- a/technical/racy-git.html +++ b/technical/racy-git.html 
@@ -952,7 +952,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-10 08:03:13 PDT  + 2020-03-11 00:03:13 JST   </div>   </div>   </body>  
diff --git a/technical/reftable.html b/technical/reftable.html index 544baf8..234451b 100644 --- a/technical/reftable.html +++ b/technical/reftable.html 
@@ -1925,8 +1925,36 @@  reftable stack, reload <code>tables.list</code>, and delete any tables no longer mentioned   in <code>tables.list</code>.</p></div>   <div class="paragraph"><p>Irregular program exit may still leave about unused files. In this case, a  -cleanup operation can read <code>tables.list</code>, note its modification timestamp, and  -delete any unreferenced <code>*.ref</code> files that are older.</p></div>  +cleanup operation should proceed as follows:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +take a lock <code>tables.list.lock</code> to prevent concurrent modifications  +</p>  +</li>  +<li>  +<p>  +refresh the reftable stack, by reading <code>tables.list</code>  +</p>  +</li>  +<li>  +<p>  +for each <code>*.ref</code> file, remove it if  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +it is not mentioned in <code>tables.list</code>, and  +</p>  +</li>  +<li>  +<p>  +its max update_index is not beyond the max update_index of the stack  +</p>  +</li>  +</ul></div>  +</li>  +</ul></div>   </div>   </div>   <div class="sect2">  @@ -2028,7 +2056,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-03-02 23:05:01 PST  + 2021-04-30 15:03:30 JST   </div>   </div>   </body>  
diff --git a/technical/reftable.txt b/technical/reftable.txt index 3ef169a..d7c3b64 100644 --- a/technical/reftable.txt +++ b/technical/reftable.txt 
@@ -1011,8 +1011,13 @@  in `tables.list`.    Irregular program exit may still leave about unused files. In this case, a -cleanup operation can read `tables.list`, note its modification timestamp, and -delete any unreferenced `*.ref` files that are older. +cleanup operation should proceed as follows: + +* take a lock `tables.list.lock` to prevent concurrent modifications +* refresh the reftable stack, by reading `tables.list` +* for each `*.ref` file, remove it if +** it is not mentioned in `tables.list`, and +** its max update_index is not beyond the max update_index of the stack      Alternatives considered 
diff --git a/technical/send-pack-pipeline.html b/technical/send-pack-pipeline.html index 234792c..54d16da 100644 --- a/technical/send-pack-pipeline.html +++ b/technical/send-pack-pipeline.html 
@@ -827,7 +827,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2013-08-20 08:40:27 PDT  + 2013-08-21 00:40:27 JST   </div>   </div>   </body>  
diff --git a/technical/shallow.html b/technical/shallow.html index 70a8cda..e381425 100644 --- a/technical/shallow.html +++ b/technical/shallow.html 
@@ -813,7 +813,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-19 16:37:10 PDT  + 2020-08-20 08:37:10 JST   </div>   </div>   </body>  
diff --git a/technical/signature-format.html b/technical/signature-format.html index 89583e2..ade9581 100644 --- a/technical/signature-format.html +++ b/technical/signature-format.html 
@@ -997,7 +997,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2016-07-06 14:33:48 PDT  + 2016-07-07 06:33:48 JST   </div>   </div>   </body>  
diff --git a/technical/sparse-index.txt b/technical/sparse-index.txt new file mode 100644 index 0000000..3b24c1a --- /dev/null +++ b/technical/sparse-index.txt 
@@ -0,0 +1,208 @@ +Git Sparse-Index Design Document +================================ + +The sparse-checkout feature allows users to focus a working directory on +a subset of the files at HEAD. The cone mode patterns, enabled by +`core.sparseCheckoutCone`, allow for very fast pattern matching to +discover which files at HEAD belong in the sparse-checkout cone. + +Three important scale dimensions for a Git working directory are: + +* `HEAD`: How many files are present at `HEAD`? + +* Populated: How many files are within the sparse-checkout cone. + +* Modified: How many files has the user modified in the working directory? + +We will use big-O notation -- O(X) -- to denote how expensive certain +operations are in terms of these dimensions. + +These dimensions are ordered by their magnitude: users (typically) modify +fewer files than are populated, and we can only populate files at `HEAD`. + +Problems occur if there is an extreme imbalance in these dimensions. For +example, if `HEAD` contains millions of paths but the populated set has +only tens of thousands, then commands like `git status` and `git add` can +be dominated by operations that require O(`HEAD`) operations instead of +O(Populated). Primarily, the cost is in parsing and rewriting the index, +which is filled primarily with files at `HEAD` that are marked with the +`SKIP_WORKTREE` bit. + +The sparse-index intends to take these commands that read and modify the +index from O(`HEAD`) to O(Populated). To do this, we need to modify the +index format in a significant way: add "sparse directory" entries. + +With cone mode patterns, it is possible to detect when an entire +directory will have its contents outside of the sparse-checkout definition. +Instead of listing all of the files it contains as individual entries, a +sparse-index contains an entry with the directory name, referencing the +object ID of the tree at `HEAD` and marked with the `SKIP_WORKTREE` bit. +If we need to discover the details for paths within that directory, we +can parse trees to find that list. + +At time of writing, sparse-directory entries violate expectations about the +index format and its in-memory data structure. There are many consumers in +the codebase that expect to iterate through all of the index entries and +see only files. In fact, these loops expect to see a reference to every +staged file. One way to handle this is to parse trees to replace a +sparse-directory entry with all of the files within that tree as the index +is loaded. However, parsing trees is slower than parsing the index format, +so that is a slower operation than if we left the index alone. The plan is +to make all of these integrations "sparse aware" so this expansion through +tree parsing is unnecessary and they use fewer resources than when using a +full index. + +The implementation plan below follows four phases to slowly integrate with +the sparse-index. The intention is to incrementally update Git commands to +interact safely with the sparse-index without significant slowdowns. This +may not always be possible, but the hope is that the primary commands that +users need in their daily work are dramatically improved. + +Phase I: Format and initial speedups +------------------------------------ + +During this phase, Git learns to enable the sparse-index and safely parse +one. Protections are put in place so that every consumer of the in-memory +data structure can operate with its current assumption of every file at +`HEAD`. + +At first, every index parse will call a helper method, +`ensure_full_index()`, which scans the index for sparse-directory entries +(pointing to trees) and replaces them with the full list of paths (with +blob contents) by parsing tree objects. This will be slower in all cases. +The only noticeable change in behavior will be that the serialized index +file contains sparse-directory entries. + +To start, we use a new required index extension, `sdir`, to allow +inserting sparse-directory entries into indexes with file format +versions 2, 3, and 4. This prevents Git versions that do not understand +the sparse-index from operating on one, while allowing tools that do not +understand the sparse-index to operate on repositories as long as they do +not interact with the index. A new format, index v5, will be introduced +that includes sparse-directory entries by default. It might also +introduce other features that have been considered for improving the +index, as well. + +Next, consumers of the index will be guarded against operating on a +sparse-index by inserting calls to `ensure_full_index()` or +`expand_index_to_path()`. If a specific path is requested, then those will +be protected from within the `index_file_exists()` and `index_name_pos()` +API calls: they will call `ensure_full_index()` if necessary. The +intention here is to preserve existing behavior when interacting with a +sparse-checkout. We don't want a change to happen by accident, without +tests. Many of these locations may not need any change before removing the +guards, but we should not do so without tests to ensure the expected +behavior happens. + +It may be desirable to _change_ the behavior of some commands in the +presence of a sparse index or more generally in any sparse-checkout +scenario. In such cases, these should be carefully communicated and +tested. No such behavior changes are intended during this phase. + +During a scan of the codebase, not every iteration of the cache entries +needs an `ensure_full_index()` check. The basic reasons include: + +1. The loop is scanning for entries with non-zero stage. These entries + are not collapsed into a sparse-directory entry. + +2. The loop is scanning for submodules. These entries are not collapsed + into a sparse-directory entry. + +3. The loop is part of the index API, especially around reading or + writing the format. + +4. The loop is checking for correct order of cache entries and that is + correct if and only if the sparse-directory entries are in the correct + location. + +5. The loop ignores entries with the `SKIP_WORKTREE` bit set, or is + otherwise already aware of sparse directory entries. + +6. The sparse-index is disabled at this point when using the split-index + feature, so no effort is made to protect the split-index API. + +Even after inserting these guards, we will keep expanding sparse-indexes +for most Git commands using the `command_requires_full_index` repository +setting. This setting will be on by default and disabled one builtin at a +time until we have sufficient confidence that all of the index operations +are properly guarded. + +To complete this phase, the commands `git status` and `git add` will be +integrated with the sparse-index so that they operate with O(Populated) +performance. They will be carefully tested for operations within and +outside the sparse-checkout definition. + +Phase II: Careful integrations +------------------------------ + +This phase focuses on ensuring that all index extensions and APIs work +well with a sparse-index. This requires significant increases to our test +coverage, especially for operations that interact with the working +directory outside of the sparse-checkout definition. Some of these +behaviors may not be the desirable ones, such as some tests already +marked for failure in `t1092-sparse-checkout-compatibility.sh`. + +The index extensions that may require special integrations are: + +* FS Monitor +* Untracked cache + +While integrating with these features, we should look for patterns that +might lead to better APIs for interacting with the index. Coalescing +common usage patterns into an API call can reduce the number of places +where sparse-directories need to be handled carefully. + +Phase III: Important command speedups +------------------------------------- + +At this point, the patterns for testing and implementing sparse-directory +logic should be relatively stable. This phase focuses on updating some of +the most common builtins that use the index to operate as O(Populated). +Here is a potential list of commands that could be valuable to integrate +at this point: + +* `git commit` +* `git checkout` +* `git merge` +* `git rebase` + +Hopefully, commands such as `git merge` and `git rebase` can benefit +instead from merge algorithms that do not use the index as a data +structure, such as the merge-ORT strategy. As these topics mature, we +may enable the ORT strategy by default for repositories using the +sparse-index feature. + +Along with `git status` and `git add`, these commands cover the majority +of users' interactions with the working directory. In addition, we can +integrate with these commands: + +* `git grep` +* `git rm` + +These have been proposed as some whose behavior could change when in a +repo with a sparse-checkout definition. It would be good to include this +behavior automatically when using a sparse-index. Some clarity is needed +to make the behavior switch clear to the user. + +This phase is the first where parallel work might be possible without too +much conflicts between topics. + +Phase IV: The long tail +----------------------- + +This last phase is less a "phase" and more "the new normal" after all of +the previous work. + +To start, the `command_requires_full_index` option could be removed in +favor of expanding only when hitting an API guard. + +There are many Git commands that could use special attention to operate as +O(Populated), while some might be so rare that it is acceptable to leave +them with additional overhead when a sparse-index is present. + +Here are some commands that might be useful to update: + +* `git sparse-checkout set` +* `git am` +* `git clean` +* `git stash` 
diff --git a/technical/trivial-merge.html b/technical/trivial-merge.html index 7d3c801..03ef32c 100644 --- a/technical/trivial-merge.html +++ b/technical/trivial-merge.html 
@@ -856,7 +856,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2017-09-10 01:38:46 PDT  + 2017-09-10 17:38:46 JST   </div>   </div>   </body>